Ответ 1
Используйте это:
let height = UIApplication.sharedApplication().statusBarFrame.height +
self.navigationController!.navigationBar.frame.height
этот портрет и ландшафтное изображение поддержки.
У меня есть ViewController (B), который обрабатывается PageViewController, который находится внутри другого ViewController (A), и откройте его модальным. Я сосредоточил ViewController (B) точно в середине экрана. Это прекрасно работает.
Но когда я нажимаю ViewController (A) из NavigationController, кадр ViewController (B) имеет большой размер и простирается ниже NavigationBar и TabBar. Но я хочу, чтобы это было сосредоточено между NavigationBar и TabBar.
Я знаю, как я могу получить высоту панели навигации и вкладки, чтобы изменить размер ViewController (B):
var topBar = self.navigationController?.navigationBar.frame.height
var bottomBar = self.tabBarController?.tabBar.frame.height
Но это не работает глубоко в иерархии vier в ViewController (B). self.navigationController и self.tabBarController равны нулю. Итак, как я могу получить высоту панели навигации и вкладки в иерархии представлений? Или мне просто нужно передать его с одного ViewController на другой, пока я не получу ViewController (B)? Или есть еще один более очевидный способ сосредоточить взгляд? Спасибо.
(Я попытался опубликовать скриншоты для лучшего понимания, но я пропустил нужные точки репутации для отправки изображений, извините)
Используйте это:
let height = UIApplication.sharedApplication().statusBarFrame.height +
self.navigationController!.navigationBar.frame.height
этот портрет и ландшафтное изображение поддержки.
Для UITabBar этот код работает:
self.tabBarController?.tabBar.frame.height
Для Swift 3
navBarHeight = (self.navigationController?.navigationBar.intrinsicContentSize.height)!
+ UIApplication.shared.statusBarFrame.height
Высота строки состояния высоты панели навигации и высота полосы вкладок всегда постоянны:
Вы можете прямо вычесть эти константы из высоты представления: self.view.frame.size.height- (44 + 20 + 49)