Swift 导航栏颜色

Posted

技术标签:

【中文标题】Swift 导航栏颜色【英文标题】:Swift Navigation Bar Color 【发布时间】:2018-03-07 20:26:02 【问题描述】:

是否可以为导航层次结构中的单个视图控制器设置导航栏颜色?让默认导航栏颜色为红色,并且该行中的最后一个视图控制器应为蓝色。我已经使用这两行来为所述视图控制器的导航栏着色:

navigationController?.navigationBar.barTintColor = .blue
navigationController?.navigationBar.tintColor = .white

但是当返回时(例如通过按下返回按钮),导航栏保持蓝色。使用上面的代码将颜色设置回红色不会做任何事情。

【问题讨论】:

你的代码sn-p(视图控制器生命周期方法)是在哪里添加的? 在 viewWillAppear 的根视图和子视图控制器中 你是否也在调用 super.viewWillAppear? @userx 这不是问题的原因。 让我确定我遇到了你的问题,所以当导航到最后一个视图控制器(应该有一个蓝色条)时它可以工作,但回到前一个会使它的条也是蓝色的不红,所以你想让它再次变红?是这样吗? 【参考方案1】:

我可以让导航栏将来自 ViewControllerB 的颜色更改为 ViewControllerA 与您的代码完全一致。我不确定你最初的问题是什么。这是我的有效代码:

ViewController A:

import UIKit

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    

    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.barTintColor = .red
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    @IBAction func buttonAction(_ sender: Any) 

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "Second")
        //self.present(controller, animated: true, completion: nil)
        self.navigationController?.pushViewController(controller, animated: true)
    



视图控制器 B:

import UIKit

class SecondViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    

    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.barTintColor = .blue
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


它没有问题。

【讨论】:

【参考方案2】:

navigationBar 在同一 UINavigationController 堆栈中的所有视图控制器之间共享。

如果要更改它以查找特定的视图控制器,则必须在显示视图控制器时设置新样式,并在关闭视图控制器时将其删除。例如,这可以在您的视图控制器的viewWillAppear/viewWillDisappear 中完成。

【讨论】:

成功了!但是现在回到前一个视图控制器时的颜色转换有点滞后。在前一个视图控制器出现之前设置颜色是否有解决方法? ***.com/questions/43014716/…

以上是关于Swift 导航栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中更改导航栏颜色

更改导航栏 Swift 顶部的颜色

使用 Swift 3 的导航栏背景颜色灯

更改导航栏底部边框颜色 Swift

如何使用swift3增加导航栏的高度并更改xcode 8中状态栏的颜色?

Xcode 13 - swift OS 15 中的导航栏和状态栏文本颜色变化