web-dev-qa-db-ja.com

より深いビュー階層でナビゲーションバーとタブバーの高さなしでフレームの高さを取得

別のViewController(A)内にあるPageViewControllerによって処理されるViewController(B)があり、モーダルで開きます。 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のvier階層の深部では機能しません(B)。 self.navigationControllerとself.tabBarControllerはnilです。それでは、ビュー階層内でナビバーとタブバーの高さをどのように下げることができますか?または、ViewController(B)に到達するまで、それを1つのViewControllerから別のViewControllerに渡すだけですか?または、ビューを中央に配置する別のより明確な方法はありますか?ありがとう。

(理解を深めるためにスクリーンショットを投稿しようとしましたが、画像を投稿するのに必要な評判ポイントがありません、申し訳ありません)

16
Darko D.

これを使って :

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

これは、ポートレートとランドスケープの状態をサポートします。

34
Ehsan Jelodar

UITabBarの場合、このコードは機能します。

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

ForSwift 3

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