我有两个viewcontrollers。第一个viewcontroller是集合视图控制器,我在self.navigationController?.hidesBarsOnSwipe = true
中设置了viewDidLoad()
。
当我从collectionView的可见单元格中推送第二个viewController
时,导航栏将显示在第二个viewController
中,但是如果我滚动collectionView单元格并且在推送时未显示导航。
谁能告诉我这是什么问题?
答案 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 = true
从viewDidLoad
移至viewWillAppear
。