• iOS13之后获取状态栏高度的方法


    目录

    前言 

    一、方法一:使用 UIWindowScene

    二、方法二:监听状态栏高度变化


    前言 

        iOS 13 及以后,获取状态栏高度的方法有所变化,因为状态栏管理从 UIApplication 转移到了 UIWindowScenestatusBarManager

    一、方法一:使用 UIWindowScene

        在 iOS 13 及以后,UIWindowScene 提供了 statusBarManager,可以从中获取状态栏的高度。以下是一个具体的实现示例:

            Swift实例代码如下:

    1. let statusBarHeight: CGFloat = {
    2. if #available(iOS 13.0, *) {
    3. let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
    4. let statusBarManager = scene?.statusBarManager
    5. return statusBarManager?.statusBarFrame.height ?? 0
    6. } else {
    7. return UIApplication.shared.statusBarFrame.height
    8. }
    9. }()

              OC实例如下:

    1. #import
    2. CGFloat statusBarHeight() {
    3. if (@available(iOS 13.0, *)) {
    4. UIWindowScene *windowScene = (UIWindowScene *)[UIApplication.sharedApplication.connectedScenes anyObject];
    5. if (windowScene) {
    6. return windowScene.statusBarManager.statusBarFrame.size.height;
    7. }
    8. } else {
    9. return UIApplication.sharedApplication.statusBarFrame.size.height;
    10. }
    11. return 0;
    12. }
    13. // 调用示例
    14. CGFloat height = statusBarHeight();
    15. NSLog(@"Status Bar Height: %f", height);

    二、方法二:监听状态栏高度变化

            除了直接获取状态栏高度,有时也需要监听状态栏高度变化。可以通过添加观察者来实现。

            Swift实例:

    1. class ViewController: UIViewController {
    2. override func viewDidLoad() {
    3. super.viewDidLoad()
    4. if #available(iOS 13.0, *) {
    5. NotificationCenter.default.addObserver(self, selector: #selector(statusBarFrameDidChange), name: UIApplication.didChangeStatusBarFrameNotification, object: nil)
    6. } else {
    7. // 对于 iOS 13 以下版本的处理
    8. }
    9. }
    10. @objc func statusBarFrameDidChange(notification: NSNotification) {
    11. let statusBarHeight = UIApplication.shared.statusBarFrame.height
    12. print("Status Bar Height: \(statusBarHeight)")
    13. }
    14. }

            OC实例:

    1. #import
    2. @interface ViewController : UIViewController
    3. @end
    4. @implementation ViewController
    5. - (void)viewDidLoad {
    6. [super viewDidLoad];
    7. if (@available(iOS 13.0, *)) {
    8. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameDidChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
    9. } else {
    10. // 对于 iOS 13 以下版本的处理
    11. }
    12. }
    13. - (void)statusBarFrameDidChange:(NSNotification *)notification {
    14. CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
    15. NSLog(@"Status Bar Height: %f", statusBarHeight);
    16. }
    17. @end

            在 iOS 13 及以后,获取状态栏高度的方法需要使用 UIWindowScenestatusBarManager。以上提供了两种方法来获取状态栏高度,并通过 Swift 和 Objective-C 示例代码进行了展示。如果需要监听状态栏高度变化,可以使用 NSNotificationCenter 添加观察者。

  • 相关阅读:
    Linux命令记录
    IDEA插件开发(21)--List and Tree Controls
    【Linux】安装mysql
    windows系统go环境配置
    【Spring源码】14. 消息多播器(观察者模式)
    Python-函数
    Windows11 Anaconda安装Pytorch
    业务架构、应用架构、技术架构、数据架构
    nodejs+vue+elementui图书馆销售网上书城管理系统express228
    【模拟实现C语言库函数】atoi的模拟实现
  • 原文地址:https://blog.csdn.net/ZCC361571217/article/details/137564846