我希望我在导航控制器堆栈中推送的一个viewControllers为“全屏” - 没有导航栏,也没有状态栏 . 我有这个代码隐藏并显示导航控制器的一个视图控制器中的导航栏(我希望它在全屏幕上推送):
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated:animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.setNavigationBarHidden(false, animated:animated)
}
在同一个viewController中,我也隐藏了状态栏:
override var prefersStatusBarHidden: Bool {
return true
}
它正如预期的那样隐藏和显示,但问题是当推动此视图控制器并从其返回时,我在转换上得到黑色条纹(参见图像) .
推送到此控制器:Push to this controller
从这个控制器返回(后退按钮):
看来这种情况正在发生,因为prefersStatusBarHidden函数删除它解决了这个问题 .
显示/隐藏导航栏的代码取自:https://stackoverflow.com/a/2406167/4207465
并基于Apple开发人员库:“显示和隐藏导航栏 - 当导航栏与导航控制器一起使用时,您始终使用UNavigationController的setNavigationBarHidden:animated:方法来显示和隐藏导航栏......”
不确定为什么会这样,感谢您的帮助!
2 回答
@Boaz Frenkel
在隐藏和显示带有或不带状态栏的导航栏时,有一种解决方案可以修复黑条 .
ViewController A : Fullscreen View
ViewController B : With NavigationBar and status bar
请尝试隐藏viewDidAppear中的导航栏 . 现在你在显示控制器之前隐藏吧 .