在工作中經(jīng)常用修改StatusBar的背景和字體顏色,下面介紹一下StatusBar到底為何物?
從整個(gè)UIWindow的曾經(jīng)結(jié)構(gòu)圖中,可以看出,StatusBar的級(jí)別比較高(猜測(cè)StatusBar level = UIWindowLevelStatusBar ),是高于當(dāng)前navigationBar,所以看到的頁面,StatusBar都是在navigationBar上面。
但是,我們?nèi)绾涡薷?code>StatusBar的背景和字體顏色?
在ios中提供了相應(yīng)的API,只需要更改statusBarStyle即可。
1、在AppDeledate中修改
[[UIApplication sharedApplication] setStatusBarStyle:<#(UIStatusBarStyle)#>]
但是如果在appDeledate中修改,必須在info.plist中更改View controller-based status bar appearance設(shè)置為NO
在工程的
info.plist文件中,添加View controller-based status bar appearance項(xiàng),并設(shè)置該項(xiàng)的值設(shè)為YES,則View controller對(duì)status bar的設(shè)置優(yōu)先級(jí)高于application的設(shè)置。 設(shè)為NO,則以application的設(shè)置為準(zhǔn),view controller的prefersStatusBarHidden方法無效,是根本不會(huì)被調(diào)用的
2、在viewController中修改在viewController中只需要實(shí)現(xiàn)幾個(gè)方法就可以
///設(shè)置status bar是否隱藏
- (BOOL)prefersStatusBarHidden { return NO;}
/// 控制status bar style。是否顯示白色字體- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent;}
當(dāng)然剛才在文章開始的時(shí)候,就闡明了status bar level是最高的,和navigation bar是沒有父子關(guān)系的,但是,當(dāng)我們更改statusbar的背景顏色的時(shí)候,只需要通過
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
把NavigationBar的層次結(jié)構(gòu)列出來更好的闡釋
[ 3] UINavigationBar
——–[ 4] UINavigationBarBackground
——–-[ 5] UIBackdropView
———-[ 5] UIImageView
———-[ 5] UIButtonLabe
當(dāng)設(shè)置barTintColor的時(shí)候,其實(shí)更改是UIBackdropView的背景顏色。是把整個(gè)navigation bar設(shè)置了背景顏色,從視覺上面看也給status bar設(shè)置背景。
在
ios9中,已經(jīng)不提倡在AppDeledate中設(shè)置status bar的信息,比如 是否隱藏,改變成白色以后的工作如果遇到其他關(guān)于status bar的問題,再做補(bǔ)充吧。