Swift(UIKit)中如何让导航栏barTintColor覆盖含刘海的整个顶部区域
解决导航栏barTintColor无法覆盖刘海区域的问题
我来帮你搞定这个问题!你遇到的情况是因为默认情况下UINavigationBar处于半透明状态,这时候barTintColor只会作用于导航栏的主体部分,不会延伸到刘海所在的状态栏区域。下面是具体的解决步骤和修改后的代码:
核心修改点
- 必须将
UINavigationBar的isTranslucent设置为false,这是让颜色覆盖整个顶部区域的关键 - 确保视图控制器允许导航栏延伸到顶部边缘(默认是开启的,除非你手动修改过相关布局属性)
- 搭配设置状态栏文字样式,让深色导航栏上的文字更清晰可读
修改后的SceneDelegate代码
class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } // 初始化window(原代码遗漏这一步,会影响后续布局生效) window = UIWindow(windowScene: windowScene) // 全局配置导航栏样式 let navBarAppearance = UINavigationBar.appearance() // 修正颜色分母:原代码用了225,正确的RGB取值分母是255 navBarAppearance.barTintColor = UIColor(displayP3Red: 47/255, green: 54/255, blue: 64/255, alpha: 1.0) navBarAppearance.backgroundColor = UIColor(displayP3Red: 47/255, green: 54/255, blue: 64/255, alpha: 1.0) navBarAppearance.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] navBarAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // 关键:关闭半透明,让颜色延伸至状态栏/刘海区域 navBarAppearance.isTranslucent = false // 设置状态栏文字为白色,适配深色导航栏 navBarAppearance.barStyle = .black // 设置根视图控制器(示例用导航控制器作为根) let rootVC = UIViewController() rootVC.title = "测试页面" let navVC = UINavigationController(rootViewController: rootVC) window?.rootViewController = navVC window?.makeKeyAndVisible() } }
额外注意事项
- 颜色值修正:你原代码里的RGB分母写为
225,这是错误的,正确的RGB颜色取值范围是0-255,我已经帮你修正了这个问题,确保颜色显示符合预期。 - 状态栏自定义:如果需要更灵活的状态栏样式,可以在具体的视图控制器中重写
preferredStatusBarStyle方法来设置。 - 局部配置:如果你不想全局修改所有导航栏,也可以针对单个
UINavigationController单独设置,把UINavigationBar.appearance()换成对应导航控制器的navigationBar属性即可。
内容的提问来源于stack exchange,提问作者Aldo Sugiarto
相关产品推荐
相关产品推荐

