正如标题所暗示的,我想知道是否有一种方法可以在Swift中改变UINavigationBar的背景色。我知道这个问题曾经被问过一次,因为我发现这个question here,但是当我试图更新它时,我无法让任何代码工作。我链接了自定义类,它是UINavigationController的子类。目前,所有子UINavigationItem的背景色都是默认的略带白色的背景色。我想能够改变他们的颜色,以适应我的应用程序中的其他用户界面元素,因为他们中的大多数是非常黑暗的,所以我试图改变下面的图片,我试图复制。
ios - 有没有办法在Swift 4中更改UINavigationBar的背景颜色-LMLPHP
有没有更近期的方法来做这个?可能使用用户定义的运行时属性。我没主意了。
我试过了

@objc func changebarColor(){
        self.navigationController?.navigationBar.barTintColor = UIColor.red;
}

    override func viewDidLoad() {
        super.viewDidLoad()
        changebarColor()


}

以及
override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBar.barStyle = UIBarStyle.blackTranslucent

        self.navigationController?.navigationBar.barTintColor  = UIColor.red;

}

以及
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController!.navigationBar .setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    self.navigationController!.navigationBar.shadowImage = UIImage();
    self.navigationController!.navigationBar.isTranslucent = true;
    self.navigationController!.navigationBar.backgroundColor = UIColor.red;
}

以及页面上发布的所有其他答案。稍微调整它们以消除错误。

最佳答案

你走对了路,但你打错了地方。您应该将其移动到viewWillAppear中,每次显示视图时都会调用该命令。viewDidLoad()只调用一次。
这意味着另一个视图控制器甚至操作系统可以在viewDidLoad()之后更改导航栏的颜色

override func viewWillAppear(_ animated:Bool)
{
    super.viewWillAppear( animated)
    self.navigationController?.navigationBar.barTintColor  = UIColor.red
}

而且,在Swift中不需要分号。

关于ios - 有没有办法在Swift 4中更改UINavigationBar的背景颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52157957/

10-15 15:18