UIStatusBar背景和字体

在工作中经常用修改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背景和字体)