Ответ 1
Это 320 x 49.
Если вы хотите протестировать, откройте Interface Builder, добавьте UITabBar, войдите в линейку, вы увидите его
UITabBar наследуется от UIVIew, поэтому вы можете использовать frame.size.hight, чтобы получить высоту
Я пишу приложение, которое использует UITabBar
для частей навигации. Я также использую UIScrollView
для представления дополнительной информации, чем то, что обычно может обрабатывать экран. Из-за этого мне нужно настроить представление прокрутки, чтобы принять во внимание высоту UITabBar
, чтобы отображалась вся информация.
Есть ли способ вычисления height
UITabBar
?
Это 320 x 49.
Если вы хотите протестировать, откройте Interface Builder, добавьте UITabBar, войдите в линейку, вы увидите его
UITabBar наследуется от UIVIew, поэтому вы можете использовать frame.size.hight, чтобы получить высоту
Если контроллер представления имеет предка, который является контроллером панели вкладок, вы можете получить высоту из этой панели вкладок.
CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
Я пытался сделать что-то подобное, центрируя ярлык в области VISIBLE вида 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]], а не [[self view] frame], потому что последний включает верхнюю панель с 20 пикселями в качестве сдвига Y (который отбрасывает вертикальное центрирование).
Надеюсь, это поможет кому-то!
Кстати: я использую iOS 4.3 и XCode 4, а значение "hard-code" для высоты TabBar по-прежнему 49 для меня!
Я знаю, что это не идеальный вариант, но я действительно не хотел, чтобы где-то было постоянное магическое число. То, что я сделал, это создать отложенный 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];
Что мне нравится в этом, так это то, что он правильно разместит панель вкладок в нижней части родителя, независимо от размера родителей.
Swift 3 +
let tabBarHeight = tabBarController?.tabBar.frame.size.height
print(tabBarHeight ?? "not defined")
Он должен печатать 49.0 (Type CGFloat)
Это должно работать в большинстве случаев в любом экземпляре UIViewController:
bottomLayoutGuide.length
В Swift:
let height = self.tabBarController?.tabBar.frame.height ?? 49.0
Опираясь на фактическую высоту панели вкладок и используя магическое число как резерв.