【问题标题】:UINavigationBar title colourUINavigationBar 标题颜色
【发布时间】:2018-01-13 19:07:12
【问题描述】:

当我回到我的主要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)!]


}

【问题讨论】:

    标签: ios uinavigationbar swift4 viewwillappear viewwilldisappear


    【解决方案1】:
    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 中调用这个方法。

    【讨论】:

    • 不,这只会给我第二个控制器中的蓝色后退按钮
    • 谢谢费萨尔。我知道所有这些导航栏设置。我在视图中设置了所有这些确实加载了,当我第一次启动应用程序时,导航栏中的标题是白色的,很好,但是当我使用应用程序时,每次我回到主控制器标题时都是绿色的: / 在我使用的所有其他控制器上,只会出现视图,视图中没有任何内容加载...
    • 同样对于主VC,您需要在ViewWillAppear上设置颜色。否则,返回主 VC 时颜色不会改变。
    • 是的。这里的第一篇文章中的代码来自主VC。
    • 尝试从 ViewWillDissAppear 中删除此代码并执行。 navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.green, NSAttributedStringKey.font: UIFont(name: "Gotham-Medium", size: 20)!]请告诉我会发生什么。
    【解决方案2】:

    由于导航栏如何在视图控制器之间共享以及系统如何更新它,这不会按您的意愿工作。

    但是,您可以在导航栏的标题中添加您想要的字体和颜色的 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 方法中删除与导航栏相关的代码。

    【讨论】:

    • 很高兴它成功了。处理起来也更简单一些,因为一旦设置您就不必担心清除它。
    • 如果它按您的意愿工作,您可以接受答案。不仅仅是因为我获得了声誉,还因为它还让其他有相同问题的人看到了正确的答案。
    【解决方案3】:

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

    【讨论】:

    • 第二个控制器中的任何组合,视图会出现或视图会消失,给我带回绿色的标题颜色:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多