You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:15:04