【问题标题】:Hiding the navigation and status bars for only one UIViewController inside a UINavigationController stack在 UINavigationController 堆栈中仅隐藏一个 UIViewController 的导航和状态栏
【发布时间】:2017-06-14 19:59:47
【问题描述】:

我希望导航控制器堆栈中的推送视图控制器之一是“全屏” - 没有导航栏和状态栏。 我有这段代码在导航控制器的一个视图控制器中隐藏和显示导航栏(我希望它被全屏推送):

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

然后从这个控制器返回(返回按钮):

Back from this controller

这似乎是由于 prefersStatusBarHidden 函数而发生的。删除它可以解决问题。

显示/隐藏导航栏的代码取自: https://stackoverflow.com/a/2406167/4207465

并基于苹果开发者库: “显示和隐藏导航栏 - 当导航栏与导航控制器结合使用时,您总是使用 UINavigationController 的 setNavigationBarHidden:animated: 方法来显示和隐藏导航栏..."

不知道为什么会这样, 感谢您的帮助!

【问题讨论】:

  • 看来这是因为prefersStatusBarHidden 删除它解决了这个问题,调查原因..

标签: ios swift uinavigationcontroller uinavigationbar uistoryboardsegue


【解决方案1】:

@Boaz Frenkel

有一种解决方案可以在有或没有状态栏的导航栏隐藏和显示期间修复黑条。

ViewController A:全屏视图

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)
}

【讨论】:

    【解决方案2】:

    请尝试在 viewDidAppear 中隐藏导航栏。现在你在显示控制器之前隐藏栏。

    func viewDidAppear(_ animated: Bool) {
        super. viewDidAppear(animated)
        self.navigationController?.setNavigationBarHidden(true, animated:    animated)
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多