iOS狀態(tài)欄的顯示與隱藏

今天設計師跑來問iOS狀態(tài)欄的問題,由于之前沒有整理,只能“我確認下給你回復”,確認得有點久,略尷尬。。。好記性不如爛筆頭,希望能養(yǎng)成整理做筆記的好習慣。那么,閑話少說, 讓我們進入正題。


我們使用xcode新建一個iOS工程,默認情況下狀態(tài)欄是顯示的。

隱藏某個控制器的狀態(tài)欄

最簡單地隱藏方法就是使用下面這段代碼:

- (BOOL)prefersStatusBarHidden {
    returnYES;
}

全局隱藏狀態(tài)欄

上面代碼確實隱藏了對應控制器的狀態(tài)欄,但是多數(shù)情況下我們的項目里面有很多控制器,如此一個個設置就略顯蛋疼,我們可以進行全局設置。注釋掉上面代碼,在 AppdelegatedidFinishLaunchingWithOptions里面添加如下代碼,并運行。

[[UIApplicationsharedApplication] setStatusBarHidden:YES];

結(jié)果有點尷尬,狀態(tài)欄還在。。打開info.plist找到參數(shù)
View controller-based status bar appearance
顧名思義,該參數(shù)決定我們項目狀態(tài)欄的顯隱藏是否以各控制器的設置為準(各自為政或統(tǒng)一管理)。將其設置為NO,再次運行。嗯,這次是我們想要的結(jié)果了。這時候如果注釋掉[[UIApplicationsharedApplication] setStatusBarHidden:YES];回到最初的prefersStatusBarHidden方案,你會發(fā)現(xiàn)狀態(tài)欄隱藏無效了,因為這個時候我們項目的狀態(tài)欄服從統(tǒng)一管理,具體控制器的配置對其無效。

隱藏啟動頁狀態(tài)欄

眼尖的同學可能會發(fā)現(xiàn)在我們設置了[[UIApplication sharedApplication] setStatusBarHidden:YES]View controller-based status bar appearance -> NO 之后app展示啟動頁的過程中狀態(tài)欄仍然顯示著。額。。。其實也對,因為我們在didFinishLaunchingWithOptions才去設置隱藏的嘛。那么如何隱藏啟動過程的狀態(tài)欄呢?再次打開info.plist,這次我們找到Status bar is initially hidden 再次顧名思義。。。你懂的,將其設置為YES,然后運行,Bingo! 狀態(tài)欄見鬼去吧。?在沒有進行對應設置的前提下,啟動頁展示過程中狀態(tài)欄的顯隱和啟動后狀態(tài)欄的顯隱是相對獨立的。關(guān)于啟動后狀態(tài)欄的顯隱的設置參照上面??兩點哈。默認情況下,若沒有進行任何代碼設置,在View controller-based status bar appearance -> YES時,啟動后的狀態(tài)欄默認顯示,否則將跟隨Status bar is initially hidden狀態(tài)。

全局隱藏情境下的個別展示

那么,問題來了,如果我們通過全局設置隱藏了狀態(tài)欄,而項目中又有個別一兩個控制偏偏器要秀一下狀態(tài)欄這怎么搞?
這種情況下就需要“宏觀調(diào)控”了,“全局”的坑還得“全局”來填,我們可以在對應要隱藏的控制器里面的viewWillAppear方法內(nèi)設置[[UIApplicationsharedApplication] setStatusBarHidden:YES],當然為了不影響我們其他的控制器狀態(tài)欄展示,應該在viewWillDisappear內(nèi)將其置為進入前的狀態(tài)[[UIApplicationsharedApplication] setStatusBarHidden:<#before status#>];

總結(jié):

  1. View controller-based status bar appearance控制App狀態(tài)欄顯隱接受全局配置(NO)或者各控制器各自配置(YES)。
  2. [[UIApplicationsharedApplication]setStatusBarHidden:hidden],必須在View controller-based status bar appearance == NO條件下才能生效。相應的prefersStatusBarHidden為局部配置項,控制對應控制器狀態(tài)欄顯隱,必須在View controller-based status bar appearance == YES才生效。
  3. 設置Status bar is initially hidden -> YES可以隱藏啟動頁展示過程的狀態(tài)欄。

demo
今天就到這吧,趕緊跟設計師交差。有什么錯誤和缺漏歡迎指正,補充。( _ )/
PS: 感謝哇丶啦咔咔的糾正哈,文中相應的錯誤與不當描述已經(jīng)更正,啟動頁展示過程中狀態(tài)欄的顯隱是相對獨立的,主要取決于Status bar is initially hidden的設置。(20170509)

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

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

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