it-swarm.com.ru

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

У меня есть 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

Но это не работает в глубине иерархии уровней в ViewController (B). self.navigationController и self.tabBarController равны нулю. Итак, как я могу получить высоту панели навигации и вкладки глубже в иерархии представления? Или мне просто нужно передать его от одного ViewController к другому, пока я не достигну ViewController (B)? Или есть другой, более очевидный способ центрировать взгляд? Благодарю.

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

15
Darko D.

Использовать этот :

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

это поддержка портретного и ландшафтного состояния.

34
Ehsan Jelodar

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

self.tabBarController?.tabBar.frame.height
6
MichelRobico

Для Swift 3

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