在工作中經常用修改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
的問題,再做補充吧。