美文网首页
iOS更改状态栏颜色(swift4)

iOS更改状态栏颜色(swift4)

作者: witlee | 来源:发表于2018-06-27 14:05 被阅读0次

一、全局更改状态栏颜色

以全局更改状态栏浅色风格为例

1、info.plist 中添加View controller-based status bar appearance 并设置为YES

2、在 AppDelegate.swift中,设置

UINavigationBar.appearance().barStyle = .black   即可 (如果不设置则默认为深色风格)


二、在个别页面设置不同的状态栏颜色

以大部分页面状态栏颜色为深色风格,某一个特殊页面需要浅色风格为例

1、info.plist 中添加View controller-based status bar appearance 并设置为NO

2、在 AppDelegate.swift中,设置

UINavigationBar.appearance().barStyle = .default 

或者 UIApplication.shared.statusBarStyle = UIStatusBarStyle.default 

3、在需要更改状态栏颜色的特殊页面

    override func viewWillAppear(_animated:Bool) {

        super.viewWillAppear(animated)

       UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent

    }

    override func viewWillDisappear(_animated:Bool) {

        super.viewWillDisappear(animated)

        UIApplication.shared.statusBarStyle = UIStatusBarStyle.default

    }

最后说说如何使用preferredStatusBarStyle这个方法(支持iOS9.0以上)

1、info.plist 中 View controller-based status bar appearance 设置为NO

2、在需要更改的vc中重写

override var preferredStatusBarStyle: UIStatusBarStyle{

        return .default or .lightContent        

}

3.最关键的地方来了!!!需要在UINavigationController写一个Catogory,重写以下方法

- (UIViewController*)childViewControllerForStatusBarStyle {

    return self.visibleViewController;

}

- (UIViewController*)childViewControllerForStatusBarHidden {

    return self.visibleViewController;

}

为什么要重写这个东西呢?通过查阅相关资料得知,

这个方法默认返回值是nil。也就是当我们调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用container(容器控制器)的preferredStatusBarStyle这个方法(app.window.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。这个时候- (UIViewController *)childViewControllerForStatusBarStyle:就派上用场了。

该类扩展的意思就是,我重写了,你不要调用Container(NavigationController或者UITabBarController)的preferredStatusBarStyle这个方法了,去调用self.visibleViewController的preferredStatusBarStyle,那么,我们写在UIViewcontroller里面的方法就会被调用了,就能更改StatusBar的前景颜色了

这样,只需要在桥接文件中引入该category,那么在全局vc中都可以通过重写preferredStatusBarStyle来更改状态栏颜色

相关文章

网友评论

      本文标题:iOS更改状态栏颜色(swift4)

      本文链接:https://www.haomeiwen.com/subject/qcpbyftx.html