Расчет высоты 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?.панель вкладок.рамка.размер.рост)!)