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

目录

前言

[一、方法一:使用 UIWindowScene](#一、方法一:使用 UIWindowScene)

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


前言

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

一、方法一:使用 UIWindowScene

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

Swift实例代码如下:

objectivec 复制代码
let statusBarHeight: CGFloat = {
    if #available(iOS 13.0, *) {
        let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene
        let statusBarManager = scene?.statusBarManager
        return statusBarManager?.statusBarFrame.height ?? 0
    } else {
        return UIApplication.shared.statusBarFrame.height
    }
}()

OC实例如下:

objectivec 复制代码
#import <UIKit/UIKit.h>

CGFloat statusBarHeight() {
    if (@available(iOS 13.0, *)) {
        UIWindowScene *windowScene = (UIWindowScene *)[UIApplication.sharedApplication.connectedScenes anyObject];
        if (windowScene) {
            return windowScene.statusBarManager.statusBarFrame.size.height;
        }
    } else {
        return UIApplication.sharedApplication.statusBarFrame.size.height;
    }
    return 0;
}

// 调用示例
CGFloat height = statusBarHeight();
NSLog(@"Status Bar Height: %f", height);

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

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

Swift实例:

Swift 复制代码
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        if #available(iOS 13.0, *) {
            NotificationCenter.default.addObserver(self, selector: #selector(statusBarFrameDidChange), name: UIApplication.didChangeStatusBarFrameNotification, object: nil)
        } else {
            // 对于 iOS 13 以下版本的处理
        }
    }

    @objc func statusBarFrameDidChange(notification: NSNotification) {
        let statusBarHeight = UIApplication.shared.statusBarFrame.height
        print("Status Bar Height: \(statusBarHeight)")
    }
}

OC实例:

objectivec 复制代码
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    if (@available(iOS 13.0, *)) {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameDidChange:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
    } else {
        // 对于 iOS 13 以下版本的处理
    }
}

- (void)statusBarFrameDidChange:(NSNotification *)notification {
    CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
    NSLog(@"Status Bar Height: %f", statusBarHeight);
}

@end

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

相关推荐
开心就好20252 天前
iOS App 安全加固流程记录,代码、资源与安装包保护
后端·ios
开心就好20252 天前
iOS App 性能测试工具怎么选?使用克魔助手(Keymob)结合 Instruments 完成
后端·ios
zhongjiahao3 天前
面试常问的 RunLoop,到底在Loop什么?
ios
wvy4 天前
iOS 26手势返回到根页面时TabBar的动效问题
ios
RickeyBoy4 天前
iOS 图片取色完全指南:从像素格式到工程实践
ios
aiopencode4 天前
使用 Ipa Guard 命令行版本将 IPA 混淆接入自动化流程
后端·ios
二流小码农5 天前
鸿蒙开发:路由组件升级,支持页面一键创建
android·ios·harmonyos
iceiceiceice5 天前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
ssshooter7 天前
Tauri 踩坑 appLink 修改后闪退
前端·ios·rust
二流小码农7 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos