Подтвердить что ты не робот

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

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

Есть ли способ вычисления height UITabBar?

4b9b3361

Ответ 1

Это 320 x 49.

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

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

Ответ 2

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

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

Ответ 3

Я пытался сделать что-то подобное, центрируя ярлык в области 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 для меня!

Ответ 4

Я знаю, что это не идеальный вариант, но я действительно не хотел, чтобы где-то было постоянное магическое число. То, что я сделал, это создать отложенный 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];

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

Ответ 5

Swift 3 +

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

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

Ответ 6

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

bottomLayoutGuide.length

Ответ 7

В Swift:

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

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