iOS应用顶部Top Bar颜色与背景重合不可见如何手动设置
iOS状态栏(顶部时间/电量栏)手动设置方法
你提到的屏幕顶端显示时间、电量、WiFi标识的栏位是iOS系统状态栏,自动适配机制失效时,可以按以下方式手动固定样式:
前置配置说明
首先需要根据你要做全局统一设置、还是单页面单独设置,调整项目Info.plist的配置项:
- 找到
View controller-based status bar appearance配置项- 全局统一控制状态栏:值设为
NO - 不同页面单独设置状态栏:值设为
YES
- 全局统一控制状态栏:值设为
- 配置修改后如果不生效,先clean项目重新编译,避免缓存影响
全局统一设置样式
适合所有页面状态栏样式一致的场景:
UIKit项目(Swift/OC)
在AppDelegate的didFinishLaunchingWithOptions生命周期方法中添加对应代码:
- 浅色背景下用深色(黑色)状态栏文字:
// Swift if #available(iOS 13.0, *) { UIApplication.shared.statusBarStyle = .darkContent } else { UIApplication.shared.statusBarStyle = .default }
// Objective-C if (@available(iOS 13.0, *)) { [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDarkContent; } else { [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; }
- 深色背景下用浅色(白色)状态栏文字:
// Swift UIApplication.shared.statusBarStyle = .lightContent
// Objective-C [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
SwiftUI项目
直接在项目根视图上添加状态栏样式修饰符即可:
// 白色文字(适配深色背景) .statusBarStyle(.lightContent) // 黑色文字(适配浅色背景) .statusBarStyle(.darkContent)
单页面自定义状态栏样式
适合不同页面需要不同状态栏样式的场景:
- 确认
Info.plist里View controller-based status bar appearance值为YES - 在需要调整样式的对应视图控制器中,重写状态栏样式属性:
// Swift override var preferredStatusBarStyle: UIStatusBarStyle { // 根据当前页面背景返回对应样式即可 return .lightContent // 白色文字 // return .darkContent // 黑色文字 }
// Objective-C - (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
- 如果页面嵌套在
UINavigationController/UITabBarController内,需要给容器控制器加扩展,把状态栏控制权交给当前显示的子页面,否则上面的重写不会生效:
// Swift 导航控制器扩展示例 extension UINavigationController { open override var preferredStatusBarStyle: UIStatusBarStyle { return topViewController?.preferredStatusBarStyle ?? .darkContent } }
常见踩坑说明
- iOS 13及以上版本不要直接用
.default样式,该样式会跟随系统明暗模式自动切换,如果你的App是固定浅色/深色主题,很容易出现文字和背景同色看不见的问题,直接固定用.darkContent或.lightContent即可 - 弹出Alert时状态栏能正常显示,是因为系统弹窗会临时修改状态栏样式适配自己的半透明蒙层,和当前页面本身的状态栏配置无关,不能作为页面配置正确的判断依据
内容的提问来源于stack exchange,提问作者Test91823012
相关产品推荐
相关产品推荐

