UINavigationBar框架高度返回44.0,但实际上是64.0



我在storyboard中有一个UINavigationController,它没有使用自动布局。随着状态栏可见,UINavigationBar的实际高度是64.0,然而当我记录self.navigationBar.frame.size.height时,我得到44.0。如何获得uinavationbar的实际高度?

我使用的是Xcode 7.3和iOS 6版本的storyboard。

UINavigationBar的高度为44。你得到64的原因是因为你的状态栏是可见的,它的高度为20

更新:
要计算高度,可以:

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

不要使用幻数。使用视图控制器的topLayoutGuide.length来获得正确的高度。导航栏的高度和状态栏的高度可以在运行时改变,所以运行viewDidLayoutSubviews中的代码总是使用正确的值。

最干净的方法是只关心navigationBar的位置和高度,而不假设它上面有一个状态栏。(事实上,如果手机的方向是横向的,甚至不会有状态栏。只需这样做:

let height = Double(self.navigationController!.navigationBar.origin.y) + Double(self.navigationController!.navigationBar.frame.height)

最新更新