You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift 5中为iOS 15设备修改状态栏背景?

解决iOS 15+ 修改状态栏背景色的警告问题

你的代码在iOS 15+和Xcode14中出现警告,原因是UIApplication.shared.windows在iOS 13引入的Scene架构下已被标记为弃用,且直接给window添加状态栏View的方式不符合新系统设计规范。以下是适配iOS 15+的两种可行方案:

方案一:利用导航栏外观设置(推荐)

如果页面使用导航栏,可通过UINavigationBarAppearance统一配置状态栏背景色,这种方式更贴合系统设计逻辑:

func setupStatusBar() {
    let appearance = UINavigationBarAppearance()
    // 设置导航栏背景色,状态栏会自动继承该颜色
    appearance.backgroundColor = .yellow
    // 适配滚动场景下的导航栏样式
    UINavigationBar.appearance().standardAppearance = appearance
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
}

方案二:在ViewController中自定义状态栏背景

若未使用导航栏,可在ViewController的view层级添加状态栏View,通过安全区域topInset适配不同设备的状态栏高度:

func setupStatusBar() {
    let statusBarView = UIView()
    statusBarView.backgroundColor = .yellow
    view.addSubview(statusBarView)
    
    // 使用AutoLayout实现自适应布局
    statusBarView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
        statusBarView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        statusBarView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
        statusBarView.heightAnchor.constraint(equalToConstant: view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 20)
    ])
}

关键注意事项

  • 确保info.plist中UIViewControllerBasedStatusBarAppearance设置为YES(默认即为该值)
  • 彻底放弃直接操作UIApplication.shared.windows的写法,改用基于Scene或ViewController层级的处理方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:19:59