UINavigationBar 无法更改颜色

Posted

技术标签:

【中文标题】UINavigationBar 无法更改颜色【英文标题】:UINavigationBar failing to change color 【发布时间】:2017-08-24 07:57:50 【问题描述】:

我正在尝试以编程方式更改导航栏的背景颜色/栏色调颜色。

我尝试了几个示例,但有些示例需要在每个视图控制器中编写代码,这对我来说不是最有意义的,因为我希望将其子类化以减少重复代码。

我创建了 UINavigationBar 的子类(因为我也想改变高度)。

我已成功更改高度,它在我的应用程序中有效。但是,在更改颜色时,它似乎不起作用。

class Navbars: UINavigationBar 

override init(frame: CGRect) 
    super.init(frame: frame)
    //self.backgroundColor = Logic.UIColorFromRGB(rgbValue: 0xff0864, alp: 1.0)
    //self.barTintColor = Logic.UIColorFromRGB(rgbValue: 0xff0864, alp: 1.0)
    self.backgroundColor = UIColor.blue
    self.barTintColor = UIColor.blue


required init(coder aDecoder: NSCoder) 
    super.init(coder: aDecoder)!


override func draw(_ rect: CGRect) 



override func sizeThatFits(_ size: CGSize) -> CGSize 
    return CGSize(width: UIScreen.main.bounds.width, height: 205)


高度发生了变化,所以我认为在 init 函数中使用代码来改变它的颜色会起作用,但它不起作用,我不知道为什么。

我什至尝试将 UINavigationController 子类化,但仍然没有任何反应。

class NavControllers: UINavigationController 

override func viewDidLoad() 
    super.viewDidLoad()
    self.navigationBar.barTintColor = UIColor.brown

    // Do any additional setup after loading the view.


override func didReceiveMemoryWarning() 
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.



如果有人知道我哪里出错了,那将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

试试这个代码

////////////////// set navigation bar tint color ///////////////
    self.navigationController.navigationBar.barTintColor = (your color here);

为我工作:)。

【讨论】:

【参考方案2】:

在操场上尝试以下对我来说很好......

class NavController: UINavigationController 

    override func viewDidLoad() 
        super.viewDidLoad()

        navigationBar.barTintColor = .red
    


let viewController = UIViewController()
viewController.view.backgroundColor = .white

let navController = NavController(rootViewController: viewController)

【讨论】:

【参考方案3】:

对于那些将 xcode 更新到 11.04 版本的人,这些解决方案不起作用。这就是为什么,在 viewWillAppear 中添加此代码

guard let navBar = navigationController?.navigationBar else fatalError("Navigation controller does not exists.")

let bgColor = UIColor.red // change your choice

navBar.backgroundColor = bgColor
navBar.standardAppearance.backgroundColor = bgColor
navBar.scrollEdgeAppearance?.backgroundColor = bgColor

【讨论】:

以上是关于UINavigationBar 无法更改颜色的主要内容,如果未能解决你的问题,请参考以下文章

iOS-UINavigationBar颜色设置

UINavigationBar 在推送时更改颜色

更改 UINavigationBar 的分隔符颜色

如何从 AppDelegate 更改 UINavigationBar 背景颜色

全局更改 UINavigationBar 条的色调颜色

更改 UINavigationBar 外观背景图像时状态栏颜色更改