展开 Segue 导致清晰的导航栏

Posted

技术标签:

【中文标题】展开 Segue 导致清晰的导航栏【英文标题】:Unwinding Segue results in Clear Navigation Bar 【发布时间】:2015-11-14 05:34:31 【问题描述】:

我有 2 个视图控制器,连接视图一个显示(推送)segue。在初始视图控制器中,我有以下内容来控制导航栏的样式:

override func viewDidLoad() 
   super.viewDidLoad()

   self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "ProximaNova-Semibold", size: 18)!,  NSForegroundColorAttributeName: UIColorFromRGB("292929")]
   self.navigationController?.navigationBar.barTintColor = UIColorFromRGB("f7f7f7")
   self.navigationController?.navigationBar.layer.borderColor = UIColorFromRGB("E9E9E9").CGColor

在目标视图控制器中,我有以下内容来控制该控制器中导航栏的样式:

 override func viewDidLoad() 
    super.viewDidLoad()

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.translucent = true

    self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "ProximaNova-Semibold", size: 18)!,  NSForegroundColorAttributeName: UIColorFromRGB("FFFFFF")]


问题是当我单击目标视图控制器上的后退按钮返回到初始视图控制器时,导航栏设置为目标视图控制器的样式。有什么解决办法吗?

【问题讨论】:

【参考方案1】:

您应该在 viewWillAppear 方法中为两个控制器编写导航栏样式的代码,如下所示。 因为 viewDidLoad 方法在视图的每个生命周期中调用一次。一旦视图被加载,该方法将不会再次执行。所以我们必须使用 viewWillAppear

而不是 viewDidLoad

初始视图控制器代码

override func viewWillAppear() 

    self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "ProximaNova-Semibold", size: 18)!,  NSForegroundColorAttributeName: UIColorFromRGB("292929")]
    self.navigationController?.navigationBar.barTintColor = UIColorFromRGB("f7f7f7")
    self.navigationController?.navigationBar.layer.borderColor = UIColorFromRGB("E9E9E9").CGColor

目标视图控制器代码

override func viewWillAppear() 
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.translucent = true

    self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "ProximaNova-Semibold", size: 18)!,  NSForegroundColorAttributeName: UIColorFromRGB("FFFFFF")]

【讨论】:

以上是关于展开 Segue 导致清晰的导航栏的主要内容,如果未能解决你的问题,请参考以下文章

无法从展开的 segue 动作中弹出

放松Segue隐藏标签栏

如何展开到导航堆栈上的第一个视图控制器

模态 Segue 进入没有导航栏的导航控制器

Segue没有显示导航栏

IOS:推送segue后导航栏消失