Как получить доступные границы внутри UITabBarController

При использовании UITabBarController, как узнать размер панели вкладок внизу? Аналогично, как узнать, сколько места в представлении с вкладками для вашего контента? Я вижу много примеров, когда люди меняют размер своих дочерних представлений вкладок на [[UIScreen mainScreen] applicationFrame], что не может быть правильным, потому что панель вкладок занимает некоторое место в нижней части экрана.

Кроме того, можно ли изменить размер панели вкладок?

Спасибо Райан

Ответов (3)

Решение

Причина, по которой вы можете использовать applicationFrame, заключается в том, что UITabBarController изменяет размер представлений своих субконтроллеров, поэтому, пока ваше представление поддерживает правильное изменение размера, все будет работать.

Вы можете получить размер панели вкладок, обратившись к свойству tabBar контроллера панели вкладок и посмотрев на его фрейм. Общий размер панели вкладок плюс область для представления можно найти, посмотрев на рамку свойства представления контроллера панели вкладок, поэтому небольшое вычитание даст вам число, которое вы ищете:

CGFloat myViewHeight = tabBarController.view  .size.height
                     - tabBarController.tabBar.size.height;

Старый вопрос, но все равно:

Если вы не загружаете представление из NIB, установите флаги автоматического изменения размера в функции loadView; что-то вроде этого:

self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight |
                             UIViewAutoresizingFlexibleWidth;

Если вы это сделаете, вы можете использовать [[UIScreen mainScreen] applicationFrame], чтобы указать фрейм вашего представления; он будет автоматически изменен, если есть панель вкладок.

Если у вас есть NIB для вашего представления, autoresizingMask устанавливается автоматически Interface Builder.

Маркус

Если вы можете узнать, как изменить размер UITabBar, вы можете изменить размер UITabBar UITabBarController. Вы можете получить доступ к объекту, взяв

[[UITabBarController subviews] objectAtIndex:0]

Но в документации рекомендуется не обращаться к объекту напрямую.