如何在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
相关产品推荐
相关产品推荐

