我知道目前iPhone/iPad顶部的状态栏(包括时间、电池和网络连接)对于非视网膜屏幕是20个像素,对于视网膜屏幕是40个像素,但为了未来证明我的应用程序,我希望能够在没有硬编码值的情况下确定这一点。是否有可能通过编程计算出状态栏的高度?
当前回答
var statusHeight: CGFloat!
if #available(iOS 13.0, *) {
statusHeight = UIApplication.shared.keyWindow?.windowScene?.statusBarManager?.statusBarFrame.height
} else {
// Fallback on earlier versions
statusHeight = UIApplication.shared.statusBarFrame.height
}
其他回答
斯威夫特5
UIApplication.shared.statusBarFrame.height
iOS中默认状态栏高度为20 pt。
更多信息:http://www.idev101.com/code/User_Interface/sizes.html
虽然状态栏通常是20pt高,但在某些情况下,它可能是这个数字的两倍:
当你在打电话的时候(这是一个很常见的场景); 当录音机、Skype或类似的应用程序在后台使用麦克风时; 个人热点激活时;
试试吧,你自己就知道了。将高度硬编码为20pt通常可以工作,直到它不起作用。
所以我赞同H2CO3的答案:
statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
我刚刚找到了一种方法,允许您不直接访问状态栏高度,而是计算它。
导航栏高度- topLayoutGuide长度=状态栏高度
迅速:
let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height
self.topLayoutGuide.length是半透明栏覆盖的顶部区域,self.navigationController?. navigationbar .frame.height是除去状态栏的半透明栏,通常是44pt。因此,通过使用这种方法,您可以很容易地计算状态栏高度,而不用担心状态栏高度因电话呼叫而变化。
下面是一个快速获取屏幕状态栏高度的方法:
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
在我的一个项目https://github.com/goktugyil/EZSwiftExtensions中包含了这些标准函数
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0
- 缺少推荐的图标文件-该包不包含iPhone / iPod Touch的应用程序图标,像素为“120x120”,png格式
- 以编程方式创建segue
- 如何使用Xcode创建。ipa文件?