Ios 有没有办法在swift 4中更改UINavigationBar的背景色

Ios 有没有办法在swift 4中更改UINavigationBar的背景色,ios,swift,uinavigationbar,Ios,Swift,Uinavigationbar,正如标题所暗示的,我想知道是否有办法在Swift中更改UINavigationBar的背景色。我知道这个问题以前曾经被问过一次,因为我发现了这个问题,但当我试图更新它时,我无法让任何代码正常工作。我已经链接了自定义类,它是UINavigationController的子类。目前,所有子UINavigationItem的背景色都是默认的略呈白色的背景色。我希望能够改变它们的颜色,以适应我的应用程序中的其他UI元素,因为它们大多数都非常暗,所以我正在尝试改变这一点,下面是我试图复制的图片 有没有更

正如标题所暗示的,我想知道是否有办法在Swift中更改UINavigationBar的背景色。我知道这个问题以前曾经被问过一次,因为我发现了这个问题,但当我试图更新它时,我无法让任何代码正常工作。我已经链接了自定义类,它是
UINavigationController
的子类。目前,所有子
UINavigationItem
的背景色都是默认的略呈白色的背景色。我希望能够改变它们的颜色,以适应我的应用程序中的其他UI元素,因为它们大多数都非常暗,所以我正在尝试改变这一点,下面是我试图复制的图片

有没有更近期的方法可以做到这一点?可能使用用户定义的运行时属性。我没有主意了

我试过了

@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;
}

@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;
}

@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;
}

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

您走的方向是正确的,但您在错误的位置调用它。您应该将其移动到
视图将出现
,每次显示视图时都会调用该视图
viewDidLoad()
只调用一次

这意味着另一个视图控制器甚至操作系统可以在
viewDidLoad()之后更改导航栏的颜色


此外,在Swift中不需要分号。

您的方法是正确的,但您在错误的位置调用它。您应该将其移动到
视图将出现
,每次显示视图时都会调用该视图
viewDidLoad()
只调用一次

这意味着另一个视图控制器甚至操作系统可以在
viewDidLoad()之后更改导航栏的颜色


此外,您不需要在Swift中使用分号。

也许您应该为我们发布您尝试过(但不起作用)的代码,以便为您提供最佳帮助。如果它当时起作用,现在也应该起作用。不同版本之间可能会有一些琐碎的事情。您的视图控制器是否位于导航控制器中?导航栏出现了吗?您发布的代码的结果是什么?当您设置
bartincolor
时发生了什么?没有什么?如果有,您有导航控制器吗?你有导航栏吗?显示更多上下文!如果您有任何其他反馈,请随意评论。我是新来的,所以我正在努力解决如何正确表达问题,并感谢您的反馈@matt,但您的屏幕截图显示您的导航栏存在严重问题。它不在状态栏后面,就像它应该的那样。这表明我是对的:问题是你没有导航控制器。所以你的命令都不起作用。你需要更多地说明这段代码属于哪一类,以及为什么它有这个不正确的导航栏。也许你应该把你尝试过的代码(但没有成功)发布给我们,以便更好地帮助你。如果它当时起作用,现在也应该起作用。不同版本之间可能会有一些琐碎的事情。您的视图控制器是否位于导航控制器中?导航栏出现了吗?您发布的代码的结果是什么?当您设置
bartincolor
时发生了什么?没有什么?如果有,您有导航控制器吗?你有导航栏吗?显示更多上下文!如果您有任何其他反馈,请随意评论。我是新来的,所以我正在努力解决如何正确表达问题,并感谢您的反馈@matt,但您的屏幕截图显示您的导航栏存在严重问题。它不在状态栏后面,就像它应该的那样。这表明我是对的:问题是你没有导航控制器。所以你的命令都不起作用。您需要更多地说明这段代码属于哪个类,以及为什么它有这个不正确的导航栏。