Swift5中NavigationBar设置背景色不生效显示为黑色问题求助
问题原因
iOS 13开始苹果新增UINavigationBarAppearance API管理导航栏样式,iOS 15之后系统默认优先读取该配置,你使用的barTintColor、titleTextAttributes等旧属性在新版系统中不会生效,因此导航栏显示为默认黑色。
你原有代码中两次修改barTintColor属于冗余逻辑,也不是问题的根本原因。
修复代码
使用新的Appearance API配置导航栏样式即可,修复后的完整代码如下:
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() navigationItem.title = "ABC title" // 导航栏按钮文字/图标颜色 navigationController?.navigationBar.tintColor = .white // 关闭导航栏透明 navigationController?.navigationBar.isTranslucent = false // 适配iOS13+导航栏样式 let navAppearance = UINavigationBarAppearance() // 设置为不透明背景 navAppearance.configureWithOpaqueBackground() // 导航栏背景色 navAppearance.backgroundColor = .red // 导航栏标题样式 navAppearance.titleTextAttributes = [.foregroundColor: UIColor.white] // 应用到所有状态的导航栏 navigationController?.navigationBar.standardAppearance = navAppearance navigationController?.navigationBar.scrollEdgeAppearance = navAppearance if #available(iOS 15.0, *) { navigationController?.navigationBar.compactScrollEdgeAppearance = navAppearance } } }
补充说明
如果需要全局所有页面都使用该导航栏样式,只需将上述UINavigationBarAppearance相关配置代码放到AppDelegate的application(_:didFinishLaunchingWithOptions:)方法中执行即可,不需要每个页面单独配置。
内容的提问来源于stack exchange,提问作者Enamul Haque
相关产品推荐
相关产品推荐

