Ios swift:更改导航栏的颜色

Ios swift:更改导航栏的颜色,ios,swift,uinavigationcontroller,uinavigationbar,Ios,Swift,Uinavigationcontroller,Uinavigationbar,我使用的是带有红色导航栏的FirstViewController。当我转到下一个SecondViewController时,我使用此代码清除导航栏颜色: self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 但当我返回到FirstViewController时,我的导航栏颜色不是红色。这是清楚的。但它应该是红色的。如何修复它 第一视图控制器中的代码: override func

我使用的是带有红色导航栏的
FirstViewController
。当我转到下一个
SecondViewController
时,我使用此代码清除导航栏颜色:

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
但当我返回到
FirstViewController
时,我的导航栏颜色不是红色。这是清楚的。但它应该是红色的。如何修复它

第一视图控制器中的代码:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationItem.largeTitleDisplayMode = .always
        self.navigationController?.navigationBar.shadowImage = UIImage()
        
        self.navigationController?.navigationBar.barTintColor = UIColor(red: 239/255, green: 210/255, blue: 166/255, alpha: 1.0)
    }

将导航栏的颜色设置为
FirstViewController
viewwillbeen
方法。

编辑您的问题。不清楚您希望导航栏是清晰的还是红色的。
但是,您可以将其放入
AppDelegate

let mainVC = MainViewController()
let navigationController = UINavigationController(rootViewController: mainVC)
navigationController.navigationBar.barTintColor = .clear// or .red

使用
来更改
导航栏的颜色,而不是
barTintColor

在第一个VC中

class FirstVC: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationItem.largeTitleDisplayMode = .always
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.backgroundColor = .red //here...
    }
}
class SecondVC: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.backgroundColor = .clear //here...
    }
}
在第二个VC中

class FirstVC: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationItem.largeTitleDisplayMode = .always
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.backgroundColor = .red //here...
    }
}
class SecondVC: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.backgroundColor = .clear //here...
    }
}

已经有了。但这没有帮助。在我的问题中添加来自
FirstViewController
的代码。我不知道我要说什么,但我想问题是因为“preferslargetiles”和“largeTitleDisplayMode”。临时注释这两行代码,你看它会工作得很好!!我写得很清楚。在
FirstViewController
红色中。在
SecondViewController
中清除颜色。好的,然后将标题从
swift:将导航栏的颜色更改为清除
swift:更改导航栏的颜色
:),但您的代码没有帮助。如果我使用
navigationController.navigationBar.barTintColor=.clear
我会在导航栏中看到半透明的黑色背景。好的,也尝试添加此行:
navigationController.navigationBar.isTranslucent=true
出现问题。。。在
FirstViewController
中,它是一个TableViewController,我需要在大模式下清除
navbar
,但如果我向下滚动我的tableView,我需要导航栏显示红色。这不适用于需要添加代码以基于滚动管理颜色的
navigationBar.backgroundColor
。仅仅添加barTintColor或backgroundColor并不能解决问题。我不知道为什么,但如果我在问题中使用代码,它就是这样工作的。没有用于滚动行为的附加代码。你能告诉我在哪里添加或滚动代码吗?可能已经有类似的问题和答案了?您需要在
FirstVC
中实现
scrollViewDidScroll(:)
方法。在这种情况下,确定滚动方向,然后根据滚动方向更改导航栏的颜色。小说明。您确定“SecondVC”中的
导航栏是透明的,不是白色的吗?因为在我的应用程序中,我使用图像作为背景,如果我编写这个
navigationBar.backgroundColor/tintColor/tintBackgroundColor.clear
,那么我只会在
navbar
区域中得到一个黑色