今天設(shè)計(jì)師跑來問iOS狀態(tài)欄的問題眠菇,由于之前沒有整理边败,只能“我確認(rèn)下給你回復(fù)”,確認(rèn)得有點(diǎn)久捎废,略尷尬笑窜。。登疗。好記性不如爛筆頭排截,希望能養(yǎng)成整理做筆記的好習(xí)慣嫌蚤。那么,閑話少說断傲, 讓我們進(jìn)入正題脱吱。
我們使用xcode新建一個(gè)iOS工程,默認(rèn)情況下狀態(tài)欄是顯示的认罩。
隱藏某個(gè)控制器的狀態(tài)欄
最簡(jiǎn)單地隱藏方法就是使用下面這段代碼:
- (BOOL)prefersStatusBarHidden {
returnYES;
}
全局隱藏狀態(tài)欄
上面代碼確實(shí)隱藏了對(duì)應(yīng)控制器的狀態(tài)欄急凰,但是多數(shù)情況下我們的項(xiàng)目里面有很多控制器,如此一個(gè)個(gè)設(shè)置就略顯蛋疼猜年,我們可以進(jìn)行全局設(shè)置。注釋掉上面代碼疾忍,在 Appdelegate
的didFinishLaunchingWithOptions
里面添加如下代碼乔外,并運(yùn)行。
[[UIApplicationsharedApplication] setStatusBarHidden:YES];
結(jié)果有點(diǎn)尷尬一罩,狀態(tài)欄還在杨幼。。打開info.plist找到參數(shù)
View controller-based status bar appearance
聂渊。
顧名思義差购,該參數(shù)決定我們項(xiàng)目狀態(tài)欄的顯隱藏是否以各控制器的設(shè)置為準(zhǔn)(各自為政或統(tǒng)一管理)。將其設(shè)置為NO汉嗽,再次運(yùn)行欲逃。嗯,這次是我們想要的結(jié)果了饼暑。這時(shí)候如果注釋掉[[UIApplicationsharedApplication] setStatusBarHidden:YES];
回到最初的prefersStatusBarHidden
方案稳析,你會(huì)發(fā)現(xiàn)狀態(tài)欄隱藏?zé)o效了,因?yàn)檫@個(gè)時(shí)候我們項(xiàng)目的狀態(tài)欄服從統(tǒng)一管理弓叛,具體控制器的配置對(duì)其無效彰居。
隱藏啟動(dòng)頁狀態(tài)欄
眼尖的同學(xué)可能會(huì)發(fā)現(xiàn)在我們?cè)O(shè)置了[[UIApplication sharedApplication] setStatusBarHidden:YES]
和View controller-based status bar appearance
-> NO 之后app展示啟動(dòng)頁的過程中狀態(tài)欄仍然顯示著。額撰筷。陈惰。。其實(shí)也對(duì)毕籽,因?yàn)槲覀冊(cè)?code>didFinishLaunchingWithOptions才去設(shè)置隱藏的嘛抬闯。那么如何隱藏啟動(dòng)過程的狀態(tài)欄呢?再次打開info.plist关筒,這次我們找到Status bar is initially hidden
再次顧名思義画髓。。平委。你懂的奈虾,將其設(shè)置為YES,然后運(yùn)行,Bingo! 狀態(tài)欄見鬼去吧肉微。?在沒有進(jìn)行對(duì)應(yīng)設(shè)置的前提下匾鸥,啟動(dòng)頁展示過程中狀態(tài)欄的顯隱和啟動(dòng)后狀態(tài)欄的顯隱是相對(duì)獨(dú)立的。關(guān)于啟動(dòng)后狀態(tài)欄的顯隱的設(shè)置參照上面??兩點(diǎn)哈碉纳。默認(rèn)情況下勿负,若沒有進(jìn)行任何代碼設(shè)置,在View controller-based status bar appearance
-> YES時(shí)劳曹,啟動(dòng)后的狀態(tài)欄默認(rèn)顯示奴愉,否則將跟隨Status bar is initially hidden
狀態(tài)。
全局隱藏情境下的個(gè)別展示
那么铁孵,問題來了锭硼,如果我們通過全局設(shè)置隱藏了狀態(tài)欄,而項(xiàng)目中又有個(gè)別一兩個(gè)控制偏偏器要秀一下狀態(tài)欄這怎么搞蜕劝?
這種情況下就需要“宏觀調(diào)控”了檀头,“全局”的坑還得“全局”來填,我們可以在對(duì)應(yīng)要隱藏的控制器里面的viewWillAppear
方法內(nèi)設(shè)置[[UIApplicationsharedApplication] setStatusBarHidden:YES]
岖沛,當(dāng)然為了不影響我們其他的控制器狀態(tài)欄展示暑始,應(yīng)該在viewWillDisappear
內(nèi)將其置為進(jìn)入前的狀態(tài)[[UIApplicationsharedApplication] setStatusBarHidden:<#before status#>]
;
總結(jié):
-
View controller-based status bar appearance
控制App狀態(tài)欄顯隱接受全局配置(NO)或者各控制器各自配置(YES)。 -
[[UIApplicationsharedApplication]setStatusBarHidden:hidden]
婴削,必須在View controller-based status bar appearance == NO
條件下才能生效廊镜。相應(yīng)的prefersStatusBarHidden
為局部配置項(xiàng),控制對(duì)應(yīng)控制器狀態(tài)欄顯隱唉俗,必須在View controller-based status bar appearance == YES
才生效期升。 - 設(shè)置
Status bar is initially hidden -> YES
可以隱藏啟動(dòng)頁展示過程的狀態(tài)欄。
demo
今天就到這吧互躬,趕緊跟設(shè)計(jì)師交差播赁。有什么錯(cuò)誤和缺漏歡迎指正,補(bǔ)充吼渡。( _ )/
PS: 感謝哇丶啦咔咔的糾正哈容为,文中相應(yīng)的錯(cuò)誤與不當(dāng)描述已經(jīng)更正,啟動(dòng)頁展示過程中狀態(tài)欄的顯隱是相對(duì)獨(dú)立的寺酪,主要取決于Status bar is initially hidden
的設(shè)置坎背。(20170509)