我知道目前iPhone/iPad顶部的状态栏(包括时间、电池和网络连接)对于非视网膜屏幕是20个像素,对于视网膜屏幕是40个像素,但为了未来证明我的应用程序,我希望能够在没有硬编码值的情况下确定这一点。是否有可能通过编程计算出状态栏的高度?


当前回答

我刚刚找到了一种方法,允许您不直接访问状态栏高度,而是计算它。

导航栏高度- topLayoutGuide长度=状态栏高度

迅速:

let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height

self.topLayoutGuide.length是半透明栏覆盖的顶部区域,self.navigationController?. navigationbar .frame.height是除去状态栏的半透明栏,通常是44pt。因此,通过使用这种方法,您可以很容易地计算状态栏高度,而不用担心状态栏高度因电话呼叫而变化。

其他回答

虽然状态栏通常是20pt高,但在某些情况下,它可能是这个数字的两倍:

当你在打电话的时候(这是一个很常见的场景); 当录音机、Skype或类似的应用程序在后台使用麦克风时; 个人热点激活时;

试试吧,你自己就知道了。将高度硬编码为20pt通常可以工作,直到它不起作用。

所以我赞同H2CO3的答案:

statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;

斯威夫特5

UIApplication.shared.statusBarFrame.height

不要忘记状态栏的框架将位于屏幕的坐标空间中!如果你在横屏模式下启动,你可能会发现宽度和高度互换了。如果你支持横向定向,我强烈建议你使用这个版本的代码:

CGRect statusBarFrame = [self.window convertRect:[UIApplication sharedApplication].statusBarFrame toView:view];

然后你可以直接读取statusBarFrame的height属性。在这个例子中,'View'应该是你希望使用测量值的视图,很可能是应用程序窗口的根视图控制器。

顺便说一句,在通话过程中,状态栏不仅可能会变高,如果状态栏被故意隐藏,它也可能为零。

我刚刚找到了一种方法,允许您不直接访问状态栏高度,而是计算它。

导航栏高度- topLayoutGuide长度=状态栏高度

迅速:

let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height

self.topLayoutGuide.length是半透明栏覆盖的顶部区域,self.navigationController?. navigationbar .frame.height是除去状态栏的半透明栏,通常是44pt。因此,通过使用这种方法,您可以很容易地计算状态栏高度,而不用担心状态栏高度因电话呼叫而变化。

iOS中默认状态栏高度为20 pt。

更多信息:http://www.idev101.com/code/User_Interface/sizes.html