导航栏在第二次和后续出现时隐藏在视图控制器上

Posted

技术标签:

【中文标题】导航栏在第二次和后续出现时隐藏在视图控制器上【英文标题】:Nav Bar Hidden on View Controller On Second and Subsequent Appearances 【发布时间】:2015-10-30 17:48:06 【问题描述】:

我有一个父 TableViewController 和一个子 ViewController 都在导航控制器的上下文中。我想要发生的是表格视图控制器从不显示导航栏,而视图控制器总是显示导航栏。我在每个子类的 viewWillAppear 函数中隐藏和显示导航栏,如下所示:

表格视图控制器:

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(true);
    navigationController?.navigationBar.hidden = true
    UIApplication.sharedApplication().statusBarHidden=true

视图控制器:

override func viewWillAppear(animated: Bool) 
    self.navigationController?.navigationBarHidden = false

这适用于第一次导航。当我启动应用程序时,父表视图控制器隐藏导航栏,当我选择第一个单元格时,子视图控制器尽职尽责地显示导航栏。但是,当我触摸导航栏上的“返回”,然后再次选择单元格时,视图控制器不再显示导航栏。

有没有更好的方法来做到这一点?

更新 - 根据要求附上 XIB 和 Storyboard 的屏幕截图。请注意,父 TableViewController 没有 XIB。我不相信这些截图会提供很多洞察力。尤其是故事板。不幸的是,Xcode 只有 2 个缩放级别: 1. 太放大没用 2. 缩小到无用 尽管如此,这里有它们:

【问题讨论】:

你在使用 Storyboard 吗? 为什么每次在视图中都会出现隐藏状态栏?还实现 super.viewWillAppear(true);在第二个控制器中。 如果不希望出现导航栏,为什么不以模态方式呈现TableViewController? @DejanSkledar 实际上,不,现在我想起来了。我在这个项目的某些方面使用故事板,但不是全部。 tableviewcontrollers都是程序化的,view controller有一个xib,但是没有附加到storyboard... @Gagan_ios 我最终这样做的原因是 viewWillAppear 是因为当我在 viewDidLoad 中设置它时,我也有一个非常奇怪的效果:TVC 会加载隐藏导航栏(预期)而 VC 会然后加载显示导航栏(预期)但是当我点击返回时,TVC 将显示导航栏!将导航栏的隐藏移动到 viewWillAppear 对 TVC 有效。不知道为什么它不适用于子 VC。 【参考方案1】:

这应该可以正常工作:当您的 ViewController 出现时,代码应该每次都被执行。尝试使用“打印”来测试是否会发生这种情况。

第一个视图控制器

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(true)
    print("viewWillLoad - Table View")
    self.navigationController?.navigationBarHidden = false

第二个视图控制器

override func viewWillAppear(animated: Bool) 
    super.viewWillAppear(true)
    print("viewWillLoad - Detail View")
    self.navigationController?.navigationBarHidden = true

我也会在某些应用程序中使用它。

【讨论】:

我将 print 语句添加到子 vc 的 viewWillAppear 函数中。有趣的是,该函数每次都会被调用,但导航栏在随后的出现中无论如何都被隐藏了。知道如何解决这个问题吗? 请提供您的故事板屏幕。 我已经提供了屏幕截图,但我无法想象它会有用。基本上我认为我需要弄清楚的是为什么取消隐藏导航栏的一行代码没有在 viewWillAppear 中被触发,即使打印语句显示该函数正在被命中。有什么想法吗?

以上是关于导航栏在第二次和后续出现时隐藏在视图控制器上的主要内容,如果未能解决你的问题,请参考以下文章

iOS导航栏在滚动时被隐藏(也是一种滚动),无论它在滚动视图之外

标签栏第二次点击弹出到导航控制器 - 如何停止它

为啥我的导航栏在 Xcode 中消失了?

具有相同根视图的导航控制器

导航栏在 iPhone XS Max swift 上关闭视图控制器上的视图

UIView 仅在第二次调用后显示