如何为每个视图控制器更改UINavigationBar

时间:2015-07-31 17:50:22

标签: ios swift

我想根据视图控制器堆栈中的视图控制器更改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上反转它;但这看起来很奇怪。我究竟做错了什么?

2 个答案:

答案 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一样,因为它会在每个视图控制器加载之前(在用户看到加载的视图之前)调用。