About StatusBar

知識(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
  • 可以設(shè)置的地方有兩個(gè):plist設(shè)置里面 和 程序代碼里
    • plist設(shè)置statusBar
      在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),這里可以設(shè)置兩個(gè)值,就是上面提到那兩個(gè)
      UIStatusBarStyleDefaultUIStatusBarStyleLightContent
      這樣在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)用你了你就告訴我你是什么樣式,是否隱藏)

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容