我知道目前iPhone/iPad顶部的状态栏(包括时间、电池和网络连接)对于非视网膜屏幕是20个像素,对于视网膜屏幕是40个像素,但为了未来证明我的应用程序,我希望能够在没有硬编码值的情况下确定这一点。是否有可能通过编程计算出状态栏的高度?
当前回答
对于iOS 13,你可以使用:
UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame.height
其他回答
虽然状态栏通常是20pt高,但在某些情况下,它可能是这个数字的两倍:
当你在打电话的时候(这是一个很常见的场景); 当录音机、Skype或类似的应用程序在后台使用麦克风时; 个人热点激活时;
试试吧,你自己就知道了。将高度硬编码为20pt通常可以工作,直到它不起作用。
所以我赞同H2CO3的答案:
statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
试试这个:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
对于iOS 13,你可以使用:
UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame.height
在iOS 13中已弃用UIApplication.shared.statusBarFrame.height
'statusBarFrame'在iOS 13.0中已弃用:改用窗口场景的statusBarManager属性。
在iOS 13中,你可以像下面这样检索状态栏高度:
let statusBarHeight = view.window?.windowScene?.statusBarManager?.statusBarFrame.height
NB !这是可选的,所以要确保你有正确的退路。
不要忘记状态栏的框架将位于屏幕的坐标空间中!如果你在横屏模式下启动,你可能会发现宽度和高度互换了。如果你支持横向定向,我强烈建议你使用这个版本的代码:
CGRect statusBarFrame = [self.window convertRect:[UIApplication sharedApplication].statusBarFrame toView:view];
然后你可以直接读取statusBarFrame的height属性。在这个例子中,'View'应该是你希望使用测量值的视图,很可能是应用程序窗口的根视图控制器。
顺便说一句,在通话过程中,状态栏不仅可能会变高,如果状态栏被故意隐藏,它也可能为零。
推荐文章
- 更改UITextField和UITextView光标/插入符颜色
- 'Project Name'是通过优化编译的——步进可能会表现得很奇怪;变量可能不可用
- 如何设置回退按钮文本在Swift
- 模拟器慢动作动画现在打开了吗?
- 如何为TableView创建NSIndexPath
- 滑动删除和“更多”按钮(就像iOS 7的邮件应用程序)
- 使UINavigationBar透明
- 如何改变推和弹出动画在一个基于导航的应用程序
- 删除/重置核心数据中的所有条目?
- setNeedsLayout vs. setNeedsUpdateConstraints和layoutIfNeeded vs. updateConstraintsIfNeeded
- 不区分大小写的比较
- 我怎么能得到一个uiimage的高度和宽度?
- 我如何模仿地图应用程序的底部表格?
- 改变导航栏后退按钮的颜色
- iOS应用程序“应用程序无法验证”只在一台设备上