我希望我在导航 Controller 堆栈中推送的 viewController 之一是“全屏”——没有导航栏,也没有状态栏。 我有这段代码在导航 Controller 的 View Controller 之一中隐藏和显示导航栏(我希望它在全屏上推送):
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
}
它按预期隐藏和显示,但问题是我在插入此 View Controller 并从它返回时在转换中出现黑色条纹(参见图片)。
推送到这个 Controller : Push to this controller
然后从这个 Controller 返回(后退按钮):
出现这种情况是因为 prefersStatusBarHidden 函数删除它可以解决问题。
显示/隐藏导航栏的代码取自: https://stackoverflow.com/a/2406167/4207465
基于苹果开发者库: “显示和隐藏导航栏 - 当导航栏与导航 Controller 结合使用时,您始终使用 UINavigationController 的 setNavigationBarHidden:animated: 方法来显示和隐藏导航栏...”
不知道为什么会这样, 感谢您的帮助!
最佳答案
@Boaz Frenkel
有一种解决方案可以解决带或不带状态栏的导航栏隐藏和显示期间的黑条。
ViewController A:全屏 View
override func viewWillAppear(animated: Bool) {
self.navigationController?.setNavigationBarHidden(true, animated: animated)
super.viewWillAppear(animated)
}
override func viewDidAppear(animated: Bool) {
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade)
super.viewDidAppear(animated)
}
ViewController B : 带有 NavigationBar 和状态栏
override func viewWillAppear(animated: Bool) {
self.navigationController?.setNavigationBarHidden(false, animated: animated)
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: .None)
super.viewWillAppear(animated)
}
关于ios - 在 UINavigationController 堆栈中仅隐藏一个 UIViewController 的导航栏和状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41922741/