iOS 關(guān)于狀態(tài)欄的相關(guān)設(shè)置(UIStatusBar)

iPhone 狀態(tài)欄 就是指的頂上的20像素高的部分,x機(jī)型大于20像素。
狀態(tài)欄分前后兩部分,要分清這兩個(gè)概念继谚,后面會(huì)用到:

前景部分:就是指的顯示電池、時(shí)間等部分阵幸;
背景部分:就是顯示黑色或者圖片的背景部分花履;
如下圖:前景部分為黑色,背景部分為白色
圖片.png

設(shè)置statusBar的【前景部分】

簡(jiǎn)單來說挚赊,就是設(shè)置顯示電池電量臭挽、時(shí)間、網(wǎng)絡(luò)部分標(biāo)示的顏色咬腕, 這里只能設(shè)置兩種顏色:

默認(rèn)的黑色(`UIStatusBarStyleDefault`)
白色(`UIStatusBarStyleLightContent`)

可以設(shè)置的地方有兩個(gè):plist設(shè)置里面 和 程序代碼里

1.plist設(shè)置statusBar

在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),這里可以設(shè)置兩個(gè)值葬荷,就是上面提到那兩個(gè) UIStatusBarStyleDefaultUIStatusBarStyleLightContent

這樣在app啟動(dòng)的launch頁顯示的時(shí)候涨共,statusBar的樣式就是上面plist設(shè)置的風(fēng)格纽帖。

2.程序代碼里設(shè)置statusBar
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];  

或者

//相對(duì)于上面的接口,這個(gè)接口可以動(dòng)畫的改變statusBar的前景色

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

不僅如此举反,ios還很貼心的在UIViewController也增加了幾個(gè)接口懊直,
目的是讓狀態(tài)欄根據(jù)當(dāng)前顯示的UIViewController來定制statusBar的前景部分。

- (UIStatusBarStyle)preferredStatusBarStyle;
- (UIViewController *)childViewControllerForStatusBarStyle;
- (void)setNeedsStatusBarAppearanceUpdate
- (UIStatusBarStyle)preferredStatusBarStyle:

在你自己的UIViewController里重寫此方法火鼻,返回你需要的值(UIStatusBarStyleDefault 或者 UIStatusBarStyleLightContent)室囊;

注意:

這里如果你只是簡(jiǎn)單的return一個(gè)固定的值,那么該UIViewController顯示的時(shí)候魁索,程序就會(huì)馬上調(diào)用該方法融撞,來改變statusBar的前景部分;
如果在該UIViewController已經(jīng)在顯示在當(dāng)前粗蔚,你可能還要在當(dāng)前頁面不時(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ì)在下次頁面刷新時(shí),調(diào)用重繪該view当辐,系統(tǒng)最快能1秒刷新60次頁面抖僵,具體要看程序設(shè)置)。

  • (UIViewController *)childViewControllerForStatusBarStyle:

這個(gè)接口也很重要缘揪,默認(rèn)返回值為nil耍群。當(dāng)我們調(diào)用setNeedsStatusBarAppearanceUpdate時(shí),系統(tǒng)會(huì)調(diào)用application.window的rootViewController的preferredStatusBarStyle方法寺晌,我們的程序里一般都是用UINavigationController做root世吨,如果是這種情況,那我們自己的UIViewController里的preferredStatusBarStyle根本不會(huì)被調(diào)用呻征;
這種情況下childViewControllerForStatusBarStyle就派上用場(chǎng)了耘婚,
我們要子類化一個(gè)UINavigationController,在這個(gè)子類里面重寫childViewControllerForStatusBarStyle方法陆赋,如下:

- (UIViewController *)childViewControllerForStatusBarStyle{
    return self.topViewController;
}

上面代碼的意思就是說沐祷,不要調(diào)用我自己(就是UINavigationController)的preferredStatusBarStyle方法,而是去調(diào)用navigationController.topViewController的preferredStatusBarStyle方法攒岛,這樣寫的話赖临,就能保證當(dāng)前顯示的UIViewController的preferredStatusBarStyle方法能影響statusBar的前景部分。

另外灾锯,有時(shí)我們的當(dāng)前顯示的UIViewController可能有多個(gè)childViewController兢榨,重寫當(dāng)前UIViewController的childViewControllerForStatusBarStyle方法,讓childViewController的preferredStatusBarStyle生效(當(dāng)前UIViewController的preferredStatusBarStyle就不會(huì)被調(diào)用了)。

簡(jiǎn)單來說吵聪,只要UIViewController重寫的的childViewControllerForStatusBarStyle方法返回值不是nil凌那,那么,UIViewController的preferredStatusBarStyle方法就不會(huì)被系統(tǒng)調(diào)用吟逝,系統(tǒng)會(huì)調(diào)用childViewControllerForStatusBarStyle方法返回的UIViewController的preferredStatusBarStyle方法帽蝶。

- (void)setNeedsStatusBarAppearanceUpdate:

讓系統(tǒng)去調(diào)用application.window的rootViewController的preferredStatusBarStyle方法,如果rootViewController的childViewControllerForStatusBarStyle返回值不為nil,則參考上面的講解块攒。

設(shè)置statusBar的【背景部分】

背景部分励稳,簡(jiǎn)單來說,就是背景色囱井;改變方法有兩種:
系統(tǒng)提供的方法

navigationBar的setBarTintColor接口驹尼,用此接口可改變statusBar的背景色

注意:一旦你設(shè)置了navigationBar的- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改變statusBar的背景色琅绅,statusBar的背景色就會(huì)變成純黑色扶欣。
另辟蹊徑

創(chuàng)建一個(gè)UIView,
設(shè)置該UIView的frame.size 和statusBar大小一樣千扶,
設(shè)置該UIView的frame.origin 為{0,-20},
設(shè)置該UIView的背景色為你希望的statusBar的顏色料祠,
在navigationBar上addSubView該UIView即可。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澎羞,一起剝皮案震驚了整個(gè)濱河市髓绽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妆绞,老刑警劉巖顺呕,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異括饶,居然都是意外死亡株茶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門图焰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來启盛,“玉大人,你說我怎么就攤上這事技羔〗┐常” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵藤滥,是天一觀的道長鳖粟。 經(jīng)常有香客問我,道長拙绊,這世上最難降的妖魔是什么向图? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任泳秀,我火速辦了婚禮,結(jié)果婚禮上张漂,老公的妹妹穿的比我還像新娘晶默。我一直安慰自己,他們只是感情好航攒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趴梢,像睡著了一般漠畜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坞靶,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天憔狞,我揣著相機(jī)與錄音,去河邊找鬼彰阴。 笑死瘾敢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尿这。 我是一名探鬼主播簇抵,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼射众!你這毒婦竟也來了碟摆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤叨橱,失蹤者是張志新(化名)和其女友劉穎典蜕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罗洗,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡愉舔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伙菜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轩缤。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仇让,靈堂內(nèi)的尸體忽然破棺而出典奉,到底是詐尸還是另有隱情,我是刑警寧澤丧叽,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布卫玖,位于F島的核電站,受9級(jí)特大地震影響踊淳,放射性物質(zhì)發(fā)生泄漏假瞬。R本人自食惡果不足惜陕靠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脱茉。 院中可真熱鬧剪芥,春花似錦、人聲如沸琴许。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榜田。三九已至益兄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間箭券,已是汗流浹背净捅。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辩块,地道東北人蛔六。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像废亭,于是被迫代替她去往敵國和親国章。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容