美文网首页
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