iOS 7中导航栏的高度是多less?

我刚刚创build了一个简单的iOS 7应用程序,使用默认的主细节模板。

MasterViewController.mviewDidAppear方法中,我login了

 self.navigationController.navigationBar.frame.size.height self.navigationController.navigationBar.frame.origin.y 

并相应地收到了44和20。 这看起来很奇怪,因为从我读的内容来看,iOS 7中的导航栏应该是64点高度,并且从0点开始,这样它就位于状态栏的下面。 我读的是

1) iOS 7 UI过渡指南

因为状态栏是透明的,所以它后面的视图显示出来

2) 在导航栏中使用背景图像

如果您的应用程序使用自定义图像作为栏的背景,则需要提供一个“更高”的图像,以便它在状态栏后面延伸。 导航栏的高度从44点(88像素)变为64点(128像素)。

导航栏和状态栏是有区别的。 令人困惑的部分是,它看起来像在屏幕顶部的一个固体特征,但实际上这些区域可以分成两个截然不同的视图; 一个状态栏和一个导航栏。 状态栏从y = 0到y = 20点跨越,导航栏从y = 20跨越到y = 64点。 所以导航栏(页面标题和导航button所在的位置)的高度为44点,但是状态栏和导航栏总共有64点的高度。

这是一个很好的资源,解决了这个问题以及iOS7中的其他大小特征: http ://ivomynttinen.com/blog/the-ios-7-design-cheat-sheet/

我从“编程iOS 7”一书中获得了这个答案,栏位置和条形度量

如果导航栏或工具栏(或本章前面讨论过的search栏)占据屏幕顶部,则iOS 7的惯例是将其高度增加到透明状态栏的下方。 为了实现这一点,iOS 7引入了一个酒吧位置的概念。

UIBarPositionTopAttached

指定该栏位于屏幕的顶部,以及其包含的视图。 具有此位置的酒吧将其背景向上延伸,从而允许其背景内容通过状态栏显示。 在iOS 7.0和更高版本中可用。

状态的高度可以变化。 通常是20像素。 不过在iPhone上打电话的时候就是40个像素。

 extension UIViewController { /// Returns 64 when normal /// /// Only on iPhone: Returns 84 when In-Call status bar is visible var topBarHeight: CGFloat { let statusBarHeight = UIApplication.shared.statusBarFrame.height let navigationBarHeight = self.navigationController?.navigationBar.frame.height ?? 0 return statusBarHeight + navigationBarHeight } }