状态栏设置

设置是否隐藏

工程设置

app刚进入lunchScreen时状态栏的设置


image.png
image.png

设置默认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

工程设置
image.png
image.png
代码实现

在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()
    }

demo

你可能感兴趣的:(状态栏设置)