iOS 代码创建的UINavigationController导航栏未延伸至安全区如何解决?
解决方法
问题根源是iOS 13及以上系统中,直接设置UINavigationBar的backgroundColor仅会作用于导航栏本身的Frame范围,不会覆盖顶部状态栏(安全区上方)区域,你需要使用UINavigationBarAppearanceAPI来配置导航栏外观,即可自动实现背景延伸至状态栏。
步骤1:替换导航栏配置代码
将你现有的navigationBarConfiguration方法替换为以下实现:
private func navigationBarConfiguration (_ controller: UINavigationController) { controller.navigationBar.prefersLargeTitles = true // 统一配置导航栏外观 let navAppearance = UINavigationBarAppearance() navAppearance.backgroundColor = .systemBlue navAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white] navAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] // 普通状态下的外观 controller.navigationBar.standardAppearance = navAppearance // 滚动到边缘时的外观,和上面保持一致避免样式突变 controller.navigationBar.scrollEdgeAppearance = navAppearance // 横竖屏小屏模式适配可加 controller.navigationBar.compactAppearance = navAppearance controller.navigationBar.tintColor = .white }
步骤2:删除无效代码
删掉你之前扩展UIViewController实现UINavigationBarDelegate的代码,该协议不需要普通ViewController实现,添加后反而可能引发导航栏行为异常。
小提示:你原有代码中
UINavigationController的变量名navigationCotnroller存在拼写错误,建议修正为navigationController避免后续开发出现未知问题。
修改完成后运行项目,导航栏的蓝色背景就会自动延伸覆盖顶部状态栏区域。
内容的提问来源于stack exchange,提问作者Badr Bujbara
相关产品推荐
相关产品推荐

