在工作中经常用修改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 controller
对status bar
的设置优先级高于application
的设置。 设为NO
,则以application
的设置为准,view controller
的prefersStatusBarHidden
方法无效,是根本不会被调用的
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
的问题,再做补充吧。