设置是否隐藏
工程设置
app刚进入lunchScreen时状态栏的设置
设置默认View controller对status bar的设置优先级高于application的设置,yes为是,no为否
View controller-based status bar appearance项设为YES,则View controller对status bar的设置优先级高于application的设置。
为NO则以application的设置为准,view controller的prefersStatusBarHidden方法无效,是根本不会被调用的。
viewController设置只对单独一个vc生效,push到下一个vc,状态栏就恢复默认设置
代码设置
在viewcontroller的写法:
进入该页面后隐藏:
override var prefersStatusBarHidden: Bool {
return true
}
设置status style
工程设置
代码实现
在viewcontroller的写法:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
// OC
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
如果用到UINavigationViewController则需重写下面的方法
override var childForStatusBarStyle: UIViewController? {
return self.topViewController
}
override var childForStatusBarHidden: UIViewController? {
return self.topViewController
}
如果用到 UITabViewController 重写以下方法
override var childForStatusBarStyle: UIViewController? {
return self.selectedViewController
}
override var childForStatusBarHidden: UIViewController? {
return self.selectedViewController
}
第三方库用法
private lazy var isPreviousStatusBarHidden: Bool = {
var previousVC: UIViewController?
if let vc = self.presentingViewController {//当前控制器的上级(父级控制器),并且是通过present方式显示的父级
// presentedViewController 表示当前用户正在操作的视图
previousVC = vc
} else {
if let navVCs = self.navigationController?.viewControllers, navVCs.count >= 2 {
previousVC = navVCs[navVCs.count - 2]
}
}
return previousVC?.prefersStatusBarHidden ?? false
}()
private lazy var isStatusBarHidden = self.isPreviousStatusBarHidden
open override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
open func setStatusBar(hidden: Bool) {
if hidden {
isStatusBarHidden = true
} else {
isStatusBarHidden = isPreviousStatusBarHidden
}
setNeedsStatusBarAppearanceUpdate()
}