我知道目前iPhone/iPad顶部的状态栏(包括时间、电池和网络连接)对于非视网膜屏幕是20个像素,对于视网膜屏幕是40个像素,但为了未来证明我的应用程序,我希望能够在没有硬编码值的情况下确定这一点。是否有可能通过编程计算出状态栏的高度?
当前回答
斯威夫特5
UIApplication.shared.statusBarFrame.height
其他回答
虽然状态栏通常是20pt高,但在某些情况下,它可能是这个数字的两倍:
当你在打电话的时候(这是一个很常见的场景); 当录音机、Skype或类似的应用程序在后台使用麦克风时; 个人热点激活时;
试试吧,你自己就知道了。将高度硬编码为20pt通常可以工作,直到它不起作用。
所以我赞同H2CO3的答案:
statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
使用以下单行代码,您可以获得状态栏的高度在任何方向,也如果它是可见的或不可见
#define STATUS_BAR_HIGHT (
[UIApplicationsharedApplication].statusBarHidden ? 0 : (
[UIApplicationsharedApplication].statusBarFrame.size.height > 100 ?
[UIApplicationsharedApplication].statusBarFrame.size.width :
[UIApplicationsharedApplication].statusBarFrame.size.height
)
)
这只是一个简单但非常有用的宏,尝试一下,你不需要写任何额外的代码
下面是一个快速获取屏幕状态栏高度的方法:
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
在我的一个项目https://github.com/goktugyil/EZSwiftExtensions中包含了这些标准函数
在iOS 13中已弃用UIApplication.shared.statusBarFrame.height
'statusBarFrame'在iOS 13.0中已弃用:改用窗口场景的statusBarManager属性。
在iOS 13中,你可以像下面这样检索状态栏高度:
let statusBarHeight = view.window?.windowScene?.statusBarManager?.statusBarFrame.height
NB !这是可选的,所以要确保你有正确的退路。
试试这个:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
推荐文章
- 我如何在我的iOS应用程序中每n分钟得到一个后台位置更新?
- 如何使用iOS创建GUID/UUID
- 禁用所呈现视图控制器的交互式撤销
- 点击按钮时如何打开手机设置?
- 如何使用UIVisualEffectView来模糊图像?
- 如何修复UITableView分隔符在iOS 7?
- 故事板中的自定义单元格行高设置没有响应
- 在Swift中使用自定义消息抛出错误/异常的最简单方法?
- 如何在Swift中获得唯一的设备ID ?
- 复制文本到剪贴板与iOS
- 在Swift中根据字符串计算UILabel的大小
- 如何调用手势点击在UIView编程在迅速
- 我如何隐藏在一个Swift iOS应用程序的状态栏?
- 在iPad上使用iOS 8正确呈现UIAlertController
- 尝试将一个非属性列表对象设置为NSUserDefaults