iOS 状态栏隐藏

3,245 阅读1分钟

iOS9.0 之前使用UIApplication.shared.isStatusBarHidden = true或者UIApplication.shared.setStatusBarHidden(true, with: .slide) 现在虽然有效,但是苹果建议使用 setStatusBarHidden(_:with:)' was deprecated in iOS 9.0: Use -[UIViewController prefersStatusBarHidden]

使用prefersStatusBarHidden方法的好处是可以控制单个页面的 statusBar 的隐藏 使用prefersStatusBarHidden方法的注意点:

  • 1.在 info.plist 中添加View controller-based status bar appearance这个key 值为 YES
  • 2.可重写当前 viewcontroller 下的关于 statusBar 的方法
override var prefersStatusBarHidden: Bool {
    return arc4random() % 2 == 0 ? true : false
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    return arc4random() % 2 == 0 ? .lightContent : .default
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return arc4random() % 2 == 0 ? .fade : .slide
}
  • 3.如果有 TabbarController 和 NavgationController 的包装还需要在相应的容器下重写以下代码
///tabbarController
override var childForStatusBarStyle: UIViewController? { // 状态栏颜色
    return self.viewControllers?[selectedIndex]
}

override var childForStatusBarHidden: UIViewController? { // 状态栏隐藏与否
     return self.viewControllers?[selectedIndex]
}


///navgationController
override var childForStatusBarStyle: UIViewController? { // 状态栏颜色
    return self.viewControllers.last
}

override var childForStatusBarHidden: UIViewController? { // 状态栏隐藏与否
    return self.viewControllers.last
}

如果想在单个页面下实现 statusBar 显示和隐藏的切换,可以给当前控制器添加一个属性,如:

var isStatusBarHidden = true {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}
override var prefersStatusBarHidden: Bool {
    return isStatusBarHidden
}

通过改变isStatusBarHidden的值来实现页面的 statusBar 的显示和隐藏