UINavigationBar 标题颜色

UINavigationBar title colour

为什么当我回到主 UIViewController 时,导航栏标题没有将其颜色更改为白色?这是简单的代码(viewWillAppearviewWillDisappear),但它不起作用,当我回到这个 VC 时,标题保持绿色。应用中的主色也是绿色:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.shared.statusBarStyle = .lightContent

    DispatchQueue.main.async {
    self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name: "Gotham-Medium", size: 20)!]
    }        
}


override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = .default

    navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.green, NSAttributedStringKey.font: UIFont(name: "Gotham-Medium", size: 20)!]


}

您必须在以前的视图控制器的视图中添加导航标题颜色代码。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.shared.statusBarStyle = .lightContent

    DispatchQueue.main.async {
       addTitleLabel()
    }        
}


override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = .default
}

func addTitleLabel(){
   var titleLabel: UILabel = UILabel()
   titleLabel.textColor = .white
   titleLabel.textAlignment = .center
   titleLabel.text = "Home"

  self.navigationItem.titleView = titleLabel
}

从 viewWillAppear 调用此方法。

由于视图控制器之间共享导航栏的方式以及系统更新它的方式,这不会按照您想要的方式工作。

然而,您可以做的是以您想要的字体和颜色在导航栏的标题中放置一个 UILabel。这种方法的优点是 UILabel 只适用于那个特定的视图控制器,所以你永远不需要重置它。

因此在推送的(第二个)视图控制器的 viewDidLoad 中放置此代码:

let label = UILabel()
label.font = UIFont(name: "Menlo", size: 20)
label.textColor = .white
label.text = self.navigationItem.title
self.navigationItem.titleView = label

(请注意,您可以将文本设置为您想要的任何内容,但 self.navigationItem.title 保持简单)

您现在可以从 viewWillAppear 和 viewWillDisappear 方法中删除与导航栏相关的代码。