隐藏状态栏swift 4

Dra*_*sic 19 ios swift4

我试图在我的一个UIViewControllers(Swift 4)中隐藏状态栏.

  • 首先,我设置基于控制器的视图状态栏的外观Info.plist.

  • prefersStatusBarHidden在我的控制器中覆盖了该属性:


override var prefersStatusBarHidden: Bool {
     return true
}
Run Code Online (Sandbox Code Playgroud)
  • viewDidLoad(),我添加setNeedsStatusBarAppearanceUpdate()了强制prefersStatusBarHidden读取属性的函数.

毕竟,我仍然看到状态栏UIViewController.

有谁可以帮助我吗?

Vir*_*ala 24

只需添加以下代码,即可隐藏任何或所有视图控制器中的状态栏:

override var prefersStatusBarHidden: Bool {
     return true
   }
Run Code Online (Sandbox Code Playgroud)

任何包含该代码的视图控制器都将默认隐藏状态栏.

如果要在状态栏中设置动画,只需在视图控制器上调用setNeedsStatusBarAppearanceUpdate(),这将强制再次读取prefersStatusBarHidden,此时您可以返回不同的值.如果你愿意,你打电话给setNeedsStatusBarAppearanceUpdate()实际上是一个动画块,这将导致状态栏隐藏或显示在一个平稳的方式中.

  • OP已经设置了`prefersStatusBarHidden`。 (2认同)

小智 7

您可能已经找到了自己的解决方案,但我这样做了:

override func viewWillAppear(_ animated: Bool) {
    // Sets the status bar to hidden when the view has finished appearing
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    // Sets the status bar to visible when the view is about to disappear
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = false
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一些有风险的代码...如果Apple出于某种原因改变子类(我不会感到惊讶,他们在过去改变了疯狂的东西),崩溃热潮爆炸 (4认同)

Alo*_*hay 5

如果您以模态显示视图控制器,请尝试

viewController.modalPresentationCapturesStatusBarAppearance = true
Run Code Online (Sandbox Code Playgroud)


小智 5

虽然有些实现更清晰,例如:

UIApplication.shared.isStatusBarHidden = true

在转换期间有一些奇怪的剪辑动画.虽然更冗长,但我更喜欢@ MachTurtle的解决方案:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        if let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as? UIView{
        statusBar.isHidden = true
        }
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    statusBar.isHidden = false
}
Run Code Online (Sandbox Code Playgroud)

尝试一下,对我很有用.

  • 这是一些有风险的代码...如果Apple出于某种原因改变子类(我不会感到惊讶,他们在过去改变了疯狂的东西),崩溃热潮爆炸 (5认同)