расчет высоты UITabBar - PullRequest
45 голосов
/ 24 июня 2010

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

Есть ли способ расчета heightUITabBar?

Ответы [ 8 ]

62 голосов
/ 24 июня 2010

Это 320 х 49.

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

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

59 голосов
/ 18 мая 2013

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

CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
8 голосов
/ 21 мая 2011

Я хотел сделать что-то похожее с центрированием метки в видимой части представления 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 (которая отбрасывает вертикальное центрирование).

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

Кстати: я использую iOS 4.3и XCode 4, и значение «жесткого кода» для высоты TabBar для меня все еще равно 49!

7 голосов
/ 10 октября 2017

В Свифт:

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

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

6 голосов
/ 09 мая 2017

Свифт 3 +

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

Должно быть напечатано 49.0 (Тип CGFloat)

3 голосов
/ 31 мая 2016

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

bottomLayoutGuide.length
3 голосов
/ 25 сентября 2012

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

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

0 голосов
/ 12 сентября 2018

Вот так я и начал работать в swift 4.1

let tabBarHeight = CGFloat ((self.tabBarController? .TabBar.frame.size.height)!)

...