美文网首页
UIStatusBar背景和字体

UIStatusBar背景和字体

作者: BernardChina | 来源:发表于2016-02-01 13:46 被阅读141次

    在工作中经常用修改StatusBar的背景和字体颜色,下面介绍一下StatusBar到底为何物?
    从整个UIWindow的曾经结构图中,可以看出,StatusBar的级别比较高(猜测StatusBar level = UIWindowLevelStatusBar ),是高于当前navigationBar,所以看到的页面,StatusBar都是在navigationBar上面。
    但是,我们如何修改StatusBar的背景和字体颜色?

    ios中提供了相应的API,只需要更改statusBarStyle即可。
    1、在AppDeledate中修改

    [[UIApplication sharedApplication] setStatusBarStyle:<#(UIStatusBarStyle)#>]
    

    但是如果在appDeledate中修改,必须在info.plist中更改View controller-based status bar appearance设置为NO

    在工程的info.plist文件中,添加View controller-based status bar appearance项,并设置该项的值设为YES,则View controllerstatus bar的设置优先级高于application的设置。 设为NO,则以application的设置为准,view controllerprefersStatusBarHidden方法无效,是根本不会被调用的

    2、在viewController中修改在viewController中只需要实现几个方法就可以

    ///设置status bar是否隐藏
    - (BOOL)prefersStatusBarHidden { return NO;}
    /// 控制status bar style。是否显示白色字体- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent;}
    

    当然刚才在文章开始的时候,就阐明了status bar level是最高的,和navigation bar是没有父子关系的,但是,当我们更改statusbar的背景颜色的时候,只需要通过

    self.navigationController.navigationBar.barTintColor = [UIColor redColor];
    

    NavigationBar的层次结构列出来更好的阐释

    [ 3] UINavigationBar
    ——–[ 4] UINavigationBarBackground
    ——–-[ 5] UIBackdropView
    ———-[ 5] UIImageView
    ———-[ 5] UIButtonLabe
    

    当设置barTintColor的时候,其实更改是UIBackdropView的背景颜色。是把整个navigation bar设置了背景颜色,从视觉上面看也给status bar设置背景。

    ios9中,已经不提倡在AppDeledate中设置status bar的信息,比如 是否隐藏,改变成白色以后的工作如果遇到其他关于status bar的问题,再做补充吧。

    相关文章

      网友评论

          本文标题:UIStatusBar背景和字体

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