Как получить доступные границы внутри UITabBarController?
-
03-07-2019 - |
Вопрос
Как узнать размер панели вкладок внизу при использовании UITabBarController? Аналогично, как узнать, сколько места у вас есть внутри представления с вкладками для вашего контента?Я вижу много примеров, когда люди присваивают размер своих дочерних представлений вкладок размеру [[UIScreen mainScreen] applicationFrame], что не может быть правильным, поскольку панель вкладок занимает некоторое место в нижней части экрана.
Кроме того, можно ли изменить размер панели вкладок?
Спасибо, Райан
Решение
Причина, по которой вы можете использовать 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]
Но в документации рекомендуется не обращаться к объекту напрямую.