You need to enable JavaScript to run this app. 如何在AppDelegate中全局设置所有视图控制器的状态栏背景色
优惠活动
大模型
产品
解决方案
定价
更多

如何在AppDelegate中全局设置所有视图控制器的状态栏背景色

全局设置App状态栏背景色方案

完全可以在App全局层面配置状态栏背景色,无需在每个视图控制器中单独添加代码,具体适配不同iOS版本的实现方式如下:

实现说明

  • iOS 12及更低版本:可以直接通过KVC获取状态栏全局实例修改背景色,在AppDelegate启动方法中配置一次即可全局生效
  • iOS 13及更高版本:由于系统将状态栏管理权交给了UIWindowScene,我们可以在全局Window上添加一个固定在状态栏位置的自定义视图,所有页面都会共用这个视图的样式

完整实现代码

场景1:项目未使用SceneDelegate(兼容iOS12及更低版本的旧项目)

在AppDelegate.swift的application(_:didFinishLaunchingWithOptions:)方法中添加如下代码:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 全局状态栏配置
    if #available(iOS 13.0, *) {
        guard let window = self.window else { return true }
        let statusBarHeight = window.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
        let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: window.bounds.width, height: statusBarHeight))
        statusBarView.backgroundColor = .red // 修改为你需要的颜色
        statusBarView.tag = 10086 // 设置固定tag方便后续修改样式
        window.addSubview(statusBarView)
        window.bringSubviewToFront(statusBarView)
    } else {
        let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
        statusBar?.backgroundColor = .red // 修改为你需要的颜色
    }
    
    // 其他原有启动逻辑
    return true
}

场景2:项目使用SceneDelegate(iOS13及以上的新项目)

在SceneDelegate.swift的scene(_:willConnectTo:options:)方法中添加如下代码:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    let window = UIWindow(windowScene: windowScene)
    self.window = window
    
    // 全局状态栏配置
    let statusBarHeight = windowScene.statusBarManager?.statusBarFrame.height ?? 0
    let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: window.bounds.width, height: statusBarHeight))
    statusBarView.backgroundColor = .red // 修改为你需要的颜色
    statusBarView.tag = 10086 // 设置固定tag方便后续修改样式
    window.addSubview(statusBarView)
    window.bringSubviewToFront(statusBarView)
    
    // 其他原有Scene初始化逻辑,比如设置根控制器
    window.rootViewController = YourRootViewController()
    window.makeKeyAndVisible()
}

动态修改颜色的方法

如果后续需要切换状态栏颜色,直接通过tag取出全局的状态栏视图修改即可:

if #available(iOS 13.0, *) {
    guard let window = UIApplication.shared.windows.first else { return }
    if let statusBarView = window.viewWithTag(10086) {
        statusBarView.backgroundColor = .blue // 改成新的颜色
    }
} else {
    let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
    statusBar?.backgroundColor = .blue
}

内容的提问来源于stack exchange,提问作者safetotry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 20:15:04