Расчет высоты UITabBar

Я пишу приложение, которое использует UITabBar по части навигации. Я также использую UIScrollView для представления дополнительной информации, чем обычно может обрабатывать экран. Из-за этого мне нужно установить вид прокрутки, чтобы учесть высоту UITabBar Так что вся информация отображается.

есть ли способ рассчитать height на UITabBar?

8 ответов


это 320 x 49.

Если вы хотите протестировать, откройте Interface Builder, добавьте UITabBar, перейдите в линейку, вы увидите его

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


Если у контроллера вида есть предок, который является контроллером панели вкладок, вы можете получить высоту из этой панели вкладок.

CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;

Я хотел сделать что-то подобное с центрированием метки в видимой части представления ViewController. Этот ViewController принадлежал UITabBarController.

вот код, который я использовал для моего лейбла:

UILabel *roomLabel = [[UILabel alloc] init];
CGRect frame = [[self view] bounds];
float tabBarHeight = [[[super tabBarController] tabBar] frame].size.height;
frame.size.height -= tabBarHeight;
[roomLabel setFrame:frame];
[[self view] addSubview:roomLabel];
[roomLabel release];

обратите внимание, что я использовал [[self view] bounds] не [[self view] frame], потому что последний включает верхнюю панель 20 пикселей в качестве смещения Y (которая сбрасывает вертикальное центрирование).

надеюсь, это кому-то поможет!

By путь: я использую iOS 4.3 и XCode 4, а значение "жесткий код" для высоты таббара по-прежнему 49 для меня!


Swift 3+

let tabBarHeight = tabBarController?.tabBar.frame.size.height
print(tabBarHeight ?? "not defined")

он должен печатать 49.0 (тип CGFloat)


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

Я сделал это также потому, что [UITabBar initWithFrame:] работает по желанию, но выполнение [bar setFrame:] не работает. Мне нужно было, чтобы рамка была правильной при создании.

UITabBarController *dtbc = [[[UITabBarController alloc] init] autorelease];

CGRect tabRect = [[[self navigationController] view] frame];
tabRect.origin.y = tabRect.size.height - [[dtbc tabBar] frame].size.height;
tabRect.size.height = [[dtbc tabBar] frame].size.height;

tabBar_ = [[UITabBar alloc] initWithFrame:tabRect];

что мне нравится в этом, так это то, что он правильно разместит панель вкладок в нижней части родителя независимо от размер родителей.


Это должно работать в большинстве случаев на любом экземпляре UIViewController:

bottomLayoutGuide.length

В Swift:

let height = self.tabBarController?.tabBar.frame.height ?? 49.0

полагаясь на фактическую высоту панели вкладок и используя магическое число в качестве запасного варианта.


вот как я заставил его работать в swift 4.1

пусть tabBarHeight = CGFloat ((self.tabBarController?.панель вкладок.рамка.размер.рост)!)