我想根据视图控制器堆栈中的视图控制器更改UINavigationBar的颜色。就像在一种方式,我可以告诉视图控制器seque然后更改导航栏颜色。唯一的问题是我试图寻找;导航颜色与前一个视图控制器保持相同。我的第一个VC的viewDidLoad中的代码是:
if let navController = self.navigationController {
navController.navigationBar.tintColor = UIColor.whiteColor()
navController.navigationBar.barTintColor = UIColor.blackColor()
navController.navigationBar.translucent = false
navController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()]
}
然后在我的下一个VC中,我希望将其作为
if let navController = self.navigationController {
navController.navigationBar.tintColor = UIColor.blackColor()
navController.navigationBar.barTintColor = UIColor.whiteColor()
navController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()]
}
我试图在viewDidDissapear上反转它;但这看起来很奇怪。我究竟做错了什么?
答案 0 :(得分:3)
我已经测试了你的代码,它对我来说运行正常,这是我的代码:
<强> FirstViewController.swift 强>
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let navController = self.navigationController {
navController.navigationBar.tintColor = UIColor.whiteColor()
navController.navigationBar.barTintColor = UIColor.redColor()
navController.navigationBar.translucent = false
navController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()]
}
}
//Add this code if you want same color for when you come back to your first viewController
override func viewWillAppear(animated: Bool) {
if let navController = self.navigationController {
navController.navigationBar.tintColor = UIColor.whiteColor()
navController.navigationBar.barTintColor = UIColor.redColor()
navController.navigationBar.translucent = false
navController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()]
}
}
}
<强> SecondViewController.swift 强>
import UIKit
class SViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let navController = self.navigationController {
navController.navigationBar.tintColor = UIColor.blackColor()
navController.navigationBar.barTintColor = UIColor.greenColor()
navController.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.blackColor()]
}
}
}
HERE是示例项目。
答案 1 :(得分:1)
在每个视图控制器的 -viewWillAppear 方法中自定义视图控制器的导航栏!
这样可以防止出现任何故障,就像你提到的-viewDidDisappear一样,因为它会在每个视图控制器加载之前(在用户看到加载的视图之前)调用。