获取 iOS 状态栏高度 - Swift 和 Objective-C 实现
获取 iOS 状态栏高度 - Swift 和 Objective-C 实现
在开发 iOS 应用时,我们经常需要获取状态栏的高度。 状态栏高度会根据设备类型、iOS 版本和系统设置而有所不同。本文将介绍在 Swift 和 Objective-C 中获取状态栏高度的两种方法。
Objective-C 实现
#define kStatusBarHeight \
({float kStatusBarHeight = 0;\
if (@available(iOS 13.0, *)) {\
NSSet *set = [UIApplication sharedApplication].connectedScenes;\
UIWindowScene *windowScene = [set anyObject];\
UIStatusBarManager *statusBarManager = windowScene.statusBarManager;\
kStatusBarHeight = statusBarManager.statusBarFrame.size.height;\
} else {\
kStatusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;\
}\
(kStatusBarHeight);})
Swift 实现
let kStatusBarHeight: CGFloat = {
var height: CGFloat = 0
if #available(iOS 13.0, *) {
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
height = windowScene?.statusBarManager?.statusBarFrame.height ?? 0
} else {
height = UIApplication.shared.statusBarFrame.height
}
return height
}()
代码说明:
- 代码分别使用 Objective-C 和 Swift 获取状态栏高度,并根据 iOS 版本区分处理方式。
#available用于判断当前 iOS 版本是否支持UIStatusBarManager,如果支持,则使用UIStatusBarManager获取状态栏高度。- 否则,使用
UIApplication的statusBarFrame获取状态栏高度。 - 代码中的
kStatusBarHeight只是一个常量,用于存储获取到的状态栏高度。
使用示例:
let statusBarHeight = kStatusBarHeight // 获取状态栏高度
print(statusBarHeight) // 打印状态栏高度
注意:
- 在使用
UIStatusBarManager获取状态栏高度时,需要确保当前应用的info.plist文件中配置了UIViewControllerBasedStatusBarAppearance为NO,否则UIStatusBarManager将无法获取到状态栏的高度。 - 获取状态栏高度通常需要在
viewDidAppear或viewWillAppear方法中调用,因为statusBarFrame在这些方法中才会被正确更新。
通过以上两种方法,您可以轻松地获取到 iOS 状态栏的高度,并将其应用到您的应用中。
原文地址: https://www.cveoy.top/t/topic/pT4B 著作权归作者所有。请勿转载和采集!