知識(shí)普及
ios上狀態(tài)欄 就是指的最上面的20像素高的部分
狀態(tài)欄分前后兩部分,要分清這兩個(gè)概念,后面會(huì)用到:
- 前景部分:就是指的顯示電池、時(shí)間等部分;
- 背景部分:就是顯示黑色或者圖片的背景部分;
如下圖:前景部分為白色,背景部分為黑色

注意:這里只涉及到ios7以及更高版本,低版本下面的講解可能無(wú)效。
設(shè)置statusBar的【前景部分】
簡(jiǎn)單來(lái)說(shuō),就是設(shè)置顯示電池電量、時(shí)間、網(wǎng)絡(luò)部分標(biāo)示的顏色,
- 這里只能設(shè)置兩種顏色:
- 默認(rèn)的黑色(
UIStatusBarStyleDefault) - 白色(
UIStatusBarStyleLightContent)
- 默認(rèn)的黑色(
- 可以設(shè)置的地方有兩個(gè):plist設(shè)置里面 和 程序代碼里
plist設(shè)置statusBar
在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),這里可以設(shè)置兩個(gè)值,就是上面提到那兩個(gè)
UIStatusBarStyleDefault和UIStatusBarStyleLightContent
這樣在app啟動(dòng)的launch頁(yè)顯示的時(shí)候,statusBar的樣式就是上面plist設(shè)置的風(fēng)格。程序代碼里設(shè)置statusBar
UIViewController也增加了幾個(gè)接口,用來(lái)做設(shè)置
綜述:status bar以下簡(jiǎn)稱SB
|決定SB樣式|決定是否隱藏SB| 調(diào)用處|
|:|:|:|
|preferredStatusBarStyle|prefersStatusBarHidden| 在實(shí)際需要顯示SB的VC中調(diào)用|
|決定SB在哪個(gè)VC生效樣式|決定SB在哪個(gè)VC隱藏|調(diào)用處|
|:|:|:|
|childViewControllerForStatusBarStyle|childViewControllerForStatusBarHidden|container或者說(shuō)parentVC|
|決定SB生效更新時(shí)機(jī)|決定SB隱藏生效時(shí)機(jī)|調(diào)用處|
|:|:|:|
|setNeedsStatusBarAppearanceUpdate|setNeedsStatusBarAppearanceUpdate|container/調(diào)度處|
逐一說(shuō)明
- -(UIStatusBarStyle)preferredStatusBarStyle:
在你自己的UIViewController里重寫(xiě)此方法,返回你需要的值(UIStatusBarStyleDefault或者UIStatusBarStyleLightContent); - -(BOOL)prefersStatusBarHidden
決定你的status bar 是否隱藏!
注意:
如果在該UIViewController已經(jīng)在顯示在當(dāng)前,你可能還要在當(dāng)前頁(yè)面不時(shí)的更改statusBar的前景色,那么,你首先需要調(diào)用下面的setNeedsStatusBarAppearanceUpdate方法(這個(gè)方法會(huì)通知系統(tǒng)去調(diào)用當(dāng)前UIViewController的preferredStatusBarStyle方法), 這個(gè)和UIView的setNeedsDisplay原理差不多(調(diào)用UIView對(duì)象的setNeedsDisplay方法后,系統(tǒng)會(huì)在下次頁(yè)面刷新時(shí),調(diào)用重繪該view,系統(tǒng)最快能1秒刷新60次頁(yè)面,具體要看程序設(shè)置)。
- -(UIViewController *)childViewControllerForStatusBarStyle
- -(UIViewController *)childViewControllerForStatusBarHidden
先來(lái)看代碼原文注釋的解讀:
重寫(xiě),用于返回一個(gè)child view 或 nil.- 非空,那么返回的那個(gè)child view的 status bar就會(huì)被調(diào)用到。
- 為空,調(diào)用當(dāng)前(container)自身的status bar
不論返回值如何變化,都必須調(diào)用setNeedsUpdatedStatusBarAttributes方法
這個(gè)接口也很重要,默認(rèn)返回值為nil。當(dāng)我們調(diào)用setNeedsStatusBarAppearanceUpdate時(shí),系統(tǒng)會(huì)調(diào)用application.window的rootViewController的preferredStatusBarStyle方法。
TIPS:若程序里用UINavigationController做root,如果是這種情況,那我們自己的UIViewController里的preferredStatusBarStyle根本不會(huì)被調(diào)用;
- -(void)setNeedsStatusBarAppearanceUpdate:
StatusBar 在需要隱藏或改變樣式時(shí)在UIViewConroller中調(diào)用
下面用一幅圖來(lái)直觀的解釋
TIPS: 注意三個(gè)函數(shù)各自調(diào)度的時(shí)機(jī)和地點(diǎn)。prefer 是調(diào)用哪個(gè)VC就在哪個(gè)VC中去設(shè)置(這很好理解,我要調(diào)用你了你就告訴我你是什么樣式,是否隱藏)
