iOS狀態(tài)欄設(shè)置無效問題處理

在iOS應(yīng)用程序開發(fā)中娩践,狀態(tài)欄是顯示在屏幕頂部的系統(tǒng)信息條活翩,用于顯示信號(hào)逞带、電量等重要信息。有時(shí)候我們需要對狀態(tài)欄顏色進(jìn)行自定義纱新,但在實(shí)際開發(fā)中可能會(huì)遇到一些困難展氓。

之前寫過iOS狀態(tài)欄如何設(shè)置的問題,見鏈接 iOS狀態(tài)欄設(shè)置 - 簡書 (jianshu.com)

我們用的方案是 控制器優(yōu)先控制狀態(tài)欄的展示脸爱,也就是默認(rèn)的遇汞,狀態(tài)欄的文字是黑色的。在需要更新狀態(tài)欄顏色的控制器返回需要的樣式簿废,比如在視頻播放器頁面狀態(tài)欄文字返回白色空入。

問題描述

但是最近遇到了狀態(tài)欄不更新的問題。問題是這樣的族檬,在使用模態(tài)方式(模態(tài)風(fēng)格是custom)彈出了帶導(dǎo)航欄的控制器后歪赢,使用該控制器,push 一個(gè)需要展示 白色文字 狀態(tài)欄的 視圖控制器单料,這個(gè)控制器關(guān)于狀態(tài)欄的方法一直未被調(diào)用埋凯,導(dǎo)致使用的還是黑色文字的狀態(tài)欄。

image.png

就是 圖中 這個(gè)導(dǎo)航 push 出來的頁面控制器 狀態(tài)欄相關(guān)的方法都沒有被調(diào)用扫尖。導(dǎo)致狀態(tài)欄沒有更新為預(yù)期的樣子白对。

問題分析

而不是這種present出來的導(dǎo)航push就沒有這個(gè)問題。更嚴(yán)格的說换怖,模態(tài)方式是 UIModalPresentationFullScreen 這種方式 也是沒有問題的甩恼。但問題使用其他的方式 比如 UIModalPresentationCustom 或者 UIModalPresentationOverFullScreen 或者 UIModalPresentationOverCurrentContext 會(huì)有這個(gè)問題。這說明模態(tài)方式沉颂,也會(huì)影響狀態(tài)欄的設(shè)置条摸。

而我們的業(yè)務(wù)需要這個(gè)present出來的頁面是半透明的,因此不能用UIModalPresentationFullScreen铸屉,只能用 UIModalPresentationCustom 或者 UIModalPresentationOverFullScreen钉蒲,使用這種方式,狀態(tài)欄就是不能正確更新抬探。

我們無法更改 UIModalPresentationStyle ,只能 想辦法 讓 我們viewController狀態(tài)欄相關(guān)的方法得到調(diào)用子巾。

問題處理

第一步: 打通狀態(tài)欄樣式的傳遞鏈條

以視圖控制器優(yōu)先控制狀態(tài)欄的方式中,window的狀態(tài)管理器會(huì)層層詢問小压,如果問到了就不再詢問,比如會(huì)問window的root VC椰于,狀態(tài)欄要展示什么怠益,root VC 如果返回了就不再繼續(xù),通常 rootVC是個(gè)容器控制器瘾婿,會(huì)詢問子控制器蜻牢,一直問到結(jié)果位置烤咧,因此,要想 子控制的狀態(tài)欄相關(guān)的方法會(huì)被調(diào)用抢呆,這個(gè)鏈條得通煮嫌。所以要對 容器做處理,實(shí)現(xiàn)狀態(tài)欄相關(guān)的詢問方法抱虐。

比如昌阿,對于Tabbar控制器,我們這么寫

- (UIViewController *)childViewControllerForStatusBarHidden {
    return self.selectedViewController;
}

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

對于導(dǎo)航控制器恳邀,我們這么寫

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

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

第二步: 模態(tài)時(shí)接管狀態(tài)欄的處理

通過第一步懦冰,我們保證了即便控制器被包括在容器中,也都有機(jī)會(huì)處理狀態(tài)欄谣沸。

然而刷钢,這么寫,仍然沒有解決我們的問題乳附,我們的方法沒有被調(diào)用内地,因?yàn)閳D中那個(gè)導(dǎo)航控制器相關(guān)的詢問事件都沒有觸發(fā)「吵看似是系統(tǒng)導(dǎo)致的瓤鼻,我們很難找到原因,我們只知道模特的方法影響了狀態(tài)欄響應(yīng)鏈條的傳遞贤重。

經(jīng)過仔細(xì)的分析茬祷,不停的試一試,我們終于找到了問題的關(guān)鍵并蝗。當(dāng)我們以模態(tài)方式出現(xiàn)時(shí)祭犯,并且有些模態(tài)方式,控制器是拿不到狀態(tài)欄的掌控權(quán)的滚停,其中有一個(gè)屬性就是用來做這個(gè)事情的沃粗。這個(gè)屬性就是 modalPresentationCapturesStatusBarAppearance該屬性的默認(rèn)值是NO,也就是說 以模態(tài)方式出現(xiàn)時(shí)键畴,默認(rèn)不 捕獲狀態(tài)欄的 處理最盅。

然而,我們肯定是要接管狀態(tài)欄的處理的起惕,因?yàn)楸仨殞⑦@個(gè)屬性設(shè)置為YES涡贱,可以通過復(fù)寫 也可以直接設(shè)置。

在我們的問題中惹想,我們只需要復(fù)寫或者設(shè)置這個(gè)屬性问词,一定接管 狀態(tài)欄的處理,我們的問題就得到了解決嘀粱。

- (BOOL)modalPresentationCapturesStatusBarAppearance {
    return YES;
}

通過以上兩個(gè)步驟激挪,讓我們的應(yīng)用徹底掌握狀態(tài)欄的設(shè)置辰狡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市垄分,隨后出現(xiàn)的幾起案子宛篇,更是在濱河造成了極大的恐慌,老刑警劉巖薄湿,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叫倍,死亡現(xiàn)場離奇詭異,居然都是意外死亡嘿般,警方通過查閱死者的電腦和手機(jī)段标,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炉奴,“玉大人逼庞,你說我怎么就攤上這事≌案希” “怎么了赛糟?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砸逊。 經(jīng)常有香客問我璧南,道長,這世上最難降的妖魔是什么师逸? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任司倚,我火速辦了婚禮,結(jié)果婚禮上篓像,老公的妹妹穿的比我還像新娘动知。我一直安慰自己,他們只是感情好员辩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布盒粮。 她就那樣靜靜地躺著,像睡著了一般奠滑。 火紅的嫁衣襯著肌膚如雪丹皱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天宋税,我揣著相機(jī)與錄音摊崭,去河邊找鬼。 笑死弃甥,一個(gè)胖子當(dāng)著我的面吹牛爽室,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淆攻,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼阔墩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓶珊?” 一聲冷哼從身側(cè)響起啸箫,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伞芹,沒想到半個(gè)月后忘苛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唱较,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年夯巷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唯笙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖勉抓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痢虹,我是刑警寧澤鸵闪,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站概疆,受9級特大地震影響逗威,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岔冀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一凯旭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧使套,春花似錦罐呼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至矫膨,卻和暖如春差凹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侧馅。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工危尿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馁痴。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓谊娇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親罗晕。 傳聞我的和親對象是個(gè)殘疾皇子济欢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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