我正在尝试创建一个用户可以定义navigationBar背景颜色的选项。 (我在这里提出了一个简单的版本)
我正在使用一个名为CustomNavigationController的自定义UINavigationController:UINavigationController与此实现:
class CustomNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillLayoutSubviews() {
self.navigationBar.barTintColor = .orange
self.navigationBar.isTranslucent = false
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
这个自定义UINavigationController嵌入在几个ViewControllers中。
因此,默认情况下,Custom NavigationController的navigationBar为橙色。
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func redButtonPressed(_ sender: Any) {
let navController = navigationController as! CustomNavigationController
navController.navigationBar.barTintColor = .red
}
@IBAction func orangeButtonPressed(_ sender: Any) {
let navController = navigationController as! CustomNavigationController
navController.navigationBar.barTintColor = .orange
}
}
第二个视图控制器可以编辑其嵌入的navigationController的颜色。
我的问题是:如何更改所有CustomNavigationControllers实例的颜色以保持应用程序中所有颜色的颜色变化?
谢谢!
答案 0 :(得分:1)
你可以试试这个
UINavigationBar.appearance().barTintColor = UIColor.orange
UINavigationBar.appearance().tintColor = UIColor.white
为了更改所有视图控制器的导航栏颜色
您可以在应用中使用所有UINavigationBar
UINavigationBar.appearance()
设置所有属性。 more
答案 1 :(得分:1)
在您的情况下,您可以像这样访问CustomNavigationController的所有实例:
tabBarController?.viewControllers?.forEach { controller in
if let controller = controller as? CustomNavigationController {
controller.customBarTintColor = .red
}
}
同样将CustomNavigationController实现更改为如下所示,否则在每次布局调用时颜色将重置为橙色。
class CustomNavigationController: UINavigationController {
var customBarTintColor: UIColor = .orange {
didSet {
navigationBar.barTintColor = customBarTintColor
}
}
override func viewDidLoad() {
super.viewDidLoad()
navigationBar.barTintColor = customBarTintColor
navigationBar.isTranslucent = false
}
}