在更深的视图层次结构中获取没有导航栏高度和标签栏高度的帧高

Dar*_* D. 20 objective-c uitabbarcontroller uinavigationcontroller ios swift

我有一个ViewController(B),由一个PageViewController处理,它在另一个ViewController(A)中并打开它模态.我将ViewController(B)完全置于屏幕中间.这很好用.

但是当我从一个NavigationController推送ViewController(A)时,ViewController(B)的框架变大并且延伸到NavigationBar和TabBar下面.但我希望它在NavigationBar和TabBar之间居中.

我知道如何获得导航栏和tabbar的高度,以便我可以调整ViewController(B)的大小:

var topBar = self.navigationController?.navigationBar.frame.height
var bottomBar = self.tabBarController?.tabBar.frame.height
Run Code Online (Sandbox Code Playgroud)

但是这在ViewController(B)的vier层次结构中不起作用.self.navigationController和self.tabBarController都是nil.那么如何在视图层次结构中更深入地获取导航栏和标签栏的高度?或者我只需要将它从一个ViewController传递到另一个ViewController,直到我到达ViewController(B)?还是有另一种更明显的方式来集中视图?谢谢.

(我试图发布截图以便更好地理解,但我错过了发布图片所需的声望点,抱歉)

Ehs*_*dar 35

用这个 :

let height = UIApplication.sharedApplication().statusBarFrame.height +
self.navigationController!.navigationBar.frame.height
Run Code Online (Sandbox Code Playgroud)

这支持肖像和风景状态.


Mic*_*ico 7

对于UITabBar,此代码工作:

self.tabBarController?.tabBar.frame.height
Run Code Online (Sandbox Code Playgroud)


小智 -20

导航栏高度状态栏高度和标签栏高度始终恒定:

  1. 导航栏 - 44pts
  2. 状态栏 - 20pts
  3. 标签栏 - 49 分。

您可以直接从视图高度中减去这些常量: self.view.frame.size.height- (44+20+49)

  • @RajdeepSingh 如果用户正在打电话并尝试使用该应用程序,状态栏实际上是 40 点高,从而忽略了这些计算。所以在这种情况下这个答案是错误的。您的答案并不适用于所有情况。 (9认同)