美文网首页
为每个控制器设置自己的statusBar样式

为每个控制器设置自己的statusBar样式

作者: petter102 | 来源:发表于2017-06-15 17:31 被阅读34次

    全局页面状态栏样式白色Light
    之前项目中是全局的白色状态栏样式,可以在 plist文件中添加以下选项,然后在Base控制器中写一句代码就可以实现全局状态栏白色的状态。


    Plist

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

    部分页面状态栏样式白色Light
    iOS 7之后, UIViewController有了一个新的方法:- preferredStatusBarStyle,可以让用户指定状态栏风格。
    但是我试了一下,却不起作用。后来才知道原因:这个方法只有在ViewController不包含在UINavigationController中时才起作用。大部分情况下,ViewController不会单独使用,一般都会嵌套在UINavigationController中的。
    所以可以写一个UINavigationController的扩展,覆盖其默认实现,返回最上面的ViewController的preferredStatusBarStyle。
    OC

    //UINavigationController+StatusBar.h
    #import <UIKit/UIKit.h>
    @interface UINavigationController (StatusBar)
    -(UIStatusBarStyle)preferredStatusBarStyle;
    @end
    //UINavigationController+StatusBar.m
    #import "UINavigationController+StatusBar.h"
    @implementation UINavigationController (StatusBar)
    - (UIStatusBarStyle)preferredStatusBarStyle { return [[self topViewController] preferredStatusBarStyle];
    }
    @end
    
    swift
    extension UINavigationController { override public func preferredStatusBarStyle() -> UIStatusBarStyle { return self.topViewController.preferredStatusBarStyle() }}
    

    然后哪需要哪引入UINavigationController+StatusBar.h头文件,此时preferredStatusBarStyle就起作用了。如果你用Swift,增加了extension就完成了。

    转自这里我这里只是备注一下。感谢原文作者

    相关文章

      网友评论

          本文标题:为每个控制器设置自己的statusBar样式

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