当推送到另一个ViewController时,NavigationBar被隐藏

时间:2017-09-19 12:49:20

标签: ios swift uinavigationcontroller autolayout uinavigationbar

我有两个viewcontrollers。第一个viewcontroller是集合视图控制器,我在self.navigationController?.hidesBarsOnSwipe = true中设置了viewDidLoad()

当我从collectionView的可见单元格中推送第二个viewController时,导航栏将显示在第二个viewController中,但是如果我滚动collectionView单元格并且在推送时未显示导航。

谁能告诉我这是什么问题?

4 个答案:

答案 0 :(得分:3)

通过滑动手势完成滚动,因此它会触发您的代码:

self.navigationController?.hidesBarsOnSwipe = true

因为导航控制器在它上面显示的所有视图控制器之间共享,所以它的属性(如隐藏栏)保留了推/弹。

常见模式是在覆盖的生命周期方法中改变它的状态,例如:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationController?.hidesBarsOnSwipe = false
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}

并在viewWillDisappear

中恢复这些状态

答案 1 :(得分:1)

当此属性设置为true时,向上滑动会隐藏导航栏和工具栏。向下滑动再次显示两个条形。如果工具栏没有任何项目,即使在滑动后它仍然可见。此属性的默认值为false。 (从苹果那里得到)

请参阅文档https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621883-hidesbarsonswipe

这意味着当你向上滑动时它会隐藏,当向下滑动时它会显示出来。这就是原因。

要修复它,您可以将以下代码添加到其他控制器

[self.navigationController setNavigationBarHidden:NO animated:YES];

答案 2 :(得分:0)

无法深入了解您的具体实施情况,但请尝试在第二个视图控制器中取消隐藏导航栏。

在第二个View控制器的viewDidLoad方法中添加以下代码。

self.navigationController?.isNavigationBarHidden = false

答案 3 :(得分:0)

将此self.navigationController?.hidesBarsOnSwipe = false和此self.navigationController?.setNavigationBarHidden(false, animated: true)放在第二个视图控制器中。

您可能希望在第一个视图控制器中将self.navigationController?.hidesBarsOnSwipe = trueviewDidLoad移至viewWillAppear