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 的显示和隐藏