无法在 iOS 11、Swift 4 的特定视图控制器中隐藏状态栏

Cannot hide status bar in a specific view controller in iOS 11, Swift 4

我有一个通用的 UIViewController,我想在其中隐藏状态栏。我有更多应该显示状态栏的视图控制器,但是这个特定的视图控制器应该隐藏状态栏。

我在 UIViewController 中实现了以下方法class:

override func viewDidLoad() {
    super.viewDidLoad()
    // FIXME: hide status bar
    var prefersStatusBarHidden: Bool {
        return true
    }
    setNeedsStatusBarAppearanceUpdate()
}

override func viewWillAppear(_ animated: Bool) {
    UIApplication.shared.isStatusBarHidden = true
}

override func viewWillDisappear(_ animated: Bool) {
    UIApplication.shared.isStatusBarHidden = false
}

在我的 info.plist 中,我设置了以下设置:

当我导航到该视图控制器时,状态栏不会隐藏并且仍然可见。

在要隐藏状态栏的视图控制器中,

viewWillAppear方法中,UIApplication.shared.isStatusBarHidden = true

viewWillDisAppear方法中,UIApplication.shared.isStatusBarHidden = false

在您的视图控制器中覆盖 prefersStatusBarHidden

override var prefersStatusBarHidden: Bool {
    return true
}

View Controller based status bar appearance 设置值 No,然后 show/hide 为特定视图控制器设置状态栏。

这是结果:

在 ViewController

中添加以下行
extension UIViewController {
    func prefersStatusBarHidden() -> Bool {
        return true
    }
}
UIApplication.shared.isStatusBarHidden = true

以上 Setter 的“isStatusBarHidden”已在 iOS 9.0

中弃用

所以使用下面的代码它工作正常:)

override var prefersStatusBarHidden: Bool {
        return true
    }

应用委托 swift4.2

NotificationCenter.default.addObserver(self, selector: #selector(videoExitFullScreen), name:NSNotification.Name(rawValue: "UIWindowDidBecomeHiddenNotification") , object: nil)

@objc func videoExitFullScreen() {
        UIApplication.shared.setStatusBarHidden(false, with: .none)

    }

要关闭某些视图控制器的状态栏,但不是全部,删除此 info.plist 条目(如果存在)或将其设置为 YES:

View controller-based status bar appearance = YES

然后将这一行添加到每个需要隐藏状态栏的视图控制器

override var prefersStatusBarHidden: Bool { return true } 

要关闭整个应用程序的状态栏,将此添加到info.plist:

View controller-based status bar appearance = NO

这将使 "Hide status bar" 能够按预期工作。检查位于部署信息下项目常规设置中的隐藏状态栏。

在Swift5

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default
}