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

Получить высоту кадра без высоты навигационной панели и высоты панели табуляции в иерархии более глубокого представления

У меня есть 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)? Или есть еще один более очевидный способ сосредоточить взгляд? Спасибо.

(Я попытался опубликовать скриншоты для лучшего понимания, но я пропустил нужные точки репутации для отправки изображений, извините)

4b9b3361

Ответ 1

Используйте это:

let height = UIApplication.sharedApplication().statusBarFrame.height +
self.navigationController!.navigationBar.frame.height

этот портрет и ландшафтное изображение поддержки.

Ответ 2

Для UITabBar этот код работает:

self.tabBarController?.tabBar.frame.height

Ответ 3

Для Swift 3

navBarHeight = (self.navigationController?.navigationBar.intrinsicContentSize.height)! 
+ UIApplication.shared.statusBarFrame.height

Ответ 4

Высота строки состояния высоты панели навигации и высота полосы вкладок всегда постоянны:

  • Панель навигации - 44pts
  • Строка состояния - 20pts
  • Панель вкладок - 49pts.

Вы можете прямо вычесть эти константы из высоты представления: self.view.frame.size.height- (44 + 20 + 49)