以前我们获取状态栏高度常用的宏定义
#define StatusBar_HEIGHT (DEVICE_IS_FULL_DISPLAY ? 44.: 20.)
由于iPhone12等机型状态栏高度不是固定的了,所以我们要动态取状态栏的高度。
然而从iOS 14开始,全面屏iPhone的状态栏高度不一定是44了,比如下面就是这些设备在iOS 14.1上的状态栏高度。
从iOS14开始StatusBar高度获取被弃用,需要使用UIStatusBarManager来获取statusBar的状态和属性,由于状态栏高度一般宏定义,常用工具类声明方法获取高度,宏定义时调用工具类方法获取,易读性高。我这里提供了OC版和swift两个版本的方法,供大家参考。
解决办法
根据不同系统,通过相应方法获取状态栏高度。
1、以下为Object-C的实现方法
+ (CGFloat)statusBarHeight {
CGFloat statusBarHeight = 0;
if (@available(iOS 13.0, *)) {
statusBarHeight = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height;
} else {
statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
}
return statusBarHeight;
}
2、以下为swift的实现方法
先要获取当前的window,再去获取状态栏高度
func keywindows() ->UIWindow? {
var window:UIWindow? =nil
if #available(iOS13.0, *) {
for windowScene:UIWindowScene in ((UIApplication.shared.connectedScenes as? Set)!) {
if windowScene.activationState== .foregroundActive{
window = windowScene.windows.first
break
}
}
returnwindow
}else{
return UIApplication.shared.keyWindow
}
}
以下为获取状态栏高度的方法
var statusHeight =0.0
if#available(iOS13.0, *) {
letcurrentWindow =keywindows()
ifcurrentWindow!=nil{
statusHeight =Double((currentWindow?.windowScene?.statusBarManager?.statusBarFrame.size.height)!)
}
}else{
statusHeight =Double(UIApplication.shared.statusBarFrame.size.height)
}
print("ios status height========>", statusHeight)
欢迎大家加入QQ群一起交流学习:
464406500