UINavigationBar无法改变颜色

时间:2017-03-30 11:49:42

标签: ios swift colors uinavigationcontroller uinavigationbar

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

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

我创建了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.
}

}

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

3 个答案:

答案 0 :(得分:1)

试试这段代码

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

为我工作:)。

答案 1 :(得分:0)

在游乐场尝试以下操作对我来说很好......

class NavController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationBar.barTintColor = .red
    }
}

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

let navController = NavController(rootViewController: viewController)

enter image description here

答案 2 :(得分:0)

对于那些将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