我正在尝试以编程方式更改导航栏的背景颜色/条纹色调。
我已经尝试了几个例子,但有些例子需要在每个视图控制器中编写代码,这对我来说没有意义,因为我希望将其子类化以减少重复的代码。
我创建了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.
}
}
如果有人知道我哪里出错了,那将非常感激。谢谢!
答案 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)
答案 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