滚动时隐藏状态栏

jmc*_*tel 19 statusbar ios swift ios8

iOS 8增加了一个超酷的新功能:在用户滚动时隐藏导航栏.

这有一行viewDidload:

navigationController?.hidesBarsOnSwipe = true
Run Code Online (Sandbox Code Playgroud)

很酷,不是吗?

但是现在我遇到了一个小问题:当隐藏导航栏时,状态栏仍然在这里并重叠内容,这很难看.

隐藏导航栏时,我该怎么做才能隐藏它?

Yar*_*sim 12

在UIViewController上覆盖以下方法:

extension MyViewController {
  override func prefersStatusBarHidden() -> Bool {
    return barsHidden // this is a custom property
  }

  // Override only if you want a different animation than the default
  override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return .slide
  }
}
Run Code Online (Sandbox Code Playgroud)

barsHidden在代码中的某处更新并调用 setNeedsStatusBarAppearanceUpdate()


erd*_*ser 0

我的回答基于这篇文章的一些评论,这些评论都是猜测。我不确定这是否有效,因为苹果没有为我们提供任何导航栏隐藏时的直接方法或委托方法。

将 UINavigationBar 子类化为 NavigationBar。将属性观察器添加到其hidden属性,如下所示:

var hidden: Bool{
didSet{
    UIApplication.sharedApplication().setStatusBarHidden(self.hidden, animation: .Slide)
}
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要转到viewDidLoad主视图控制器中的方法,并将self.navigationBar属性(或self.navigationController.navigationBar,不确定是哪一个)设置为新的 NavigationBar 类的实例。

请注意,我现在无法对此进行测试,请让我知道它如何/是否有效。