获取 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 获取状态栏高度。
  • 否则,使用 UIApplicationstatusBarFrame 获取状态栏高度。
  • 代码中的 kStatusBarHeight 只是一个常量,用于存储获取到的状态栏高度。

使用示例:

let statusBarHeight = kStatusBarHeight // 获取状态栏高度
print(statusBarHeight) // 打印状态栏高度

注意:

  • 在使用 UIStatusBarManager 获取状态栏高度时,需要确保当前应用的 info.plist 文件中配置了 UIViewControllerBasedStatusBarAppearanceNO,否则 UIStatusBarManager 将无法获取到状态栏的高度。
  • 获取状态栏高度通常需要在 viewDidAppearviewWillAppear 方法中调用,因为 statusBarFrame 在这些方法中才会被正确更新。

通过以上两种方法,您可以轻松地获取到 iOS 状态栏的高度,并将其应用到您的应用中。

获取 iOS 状态栏高度 - Swift 和 Objective-C 实现

原文地址: https://www.cveoy.top/t/topic/pT4B 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录