UINavigationBar frame height returns 44.0 但实际上是 64.0

UINavigationBar frame height returns 44.0 but is actually 64.0

我在未使用 AutoLayout 的故事板中有一个 UINavigationController。在状态栏可见的情况下,UINavigationBar 的实际高度为 64.0,但当我登录 self.navigationBar.frame.size.height 时,我得到 44.0。如何获取 UINavigationBar 的实际高度?

我正在使用 Xcode 7.3,故事板是为 iOS 6 构建的。

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

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

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

不要使用幻数。使用视图控制器的 topLayoutGuide.length 获得正确的高度。导航栏高度和状态栏高度可以在 运行 时间内更改,因此 运行 您在 viewDidLayoutSubviews 中的代码始终使用正确的值。

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

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