Swift 修改狀態(tài)欄顏色/樣式(重寫(xiě) preferredStatusBarStyle 無(wú)效的問(wèn)題)

默認(rèn)情況下单旁,頂部狀態(tài)欄(statusBar)為 default 樣式(即黑色文字和圖標(biāo))拦赠,但我們有時(shí)會(huì)希望可以修改狀態(tài)欄的樣巍沙,這樣,我們的應(yīng)用看起來(lái)會(huì)更加協(xié)調(diào)荷鼠。

我們針對(duì)不同的情況句携,所做的處理也不盡相同,這些情況包括:

沒(méi)有使用導(dǎo)航控制器的情況

使用了系統(tǒng)導(dǎo)航控制器的情況

使用了自定義導(dǎo)航控制器的情況

前提條件:

plist文件里面要設(shè)置 View controller-based status bar appearance為YES(系統(tǒng)默認(rèn)為YES允乐,不要誤設(shè)為 NO)矮嫉。

沒(méi)有使用導(dǎo)航控制器的情況

如果沒(méi)有使用導(dǎo)航控制器 UINavigationController削咆,那么我們只需要在 UIViewController 中重寫(xiě) preferredStatusBarStyle 可讀屬性,在具體實(shí)現(xiàn)中返回希望使用的樣式即可蠢笋。然后在需要更新?tīng)顟B(tài)欄樣式的時(shí)候拨齐,調(diào)用 setNeedsStatusBarAppearanceUpdate() 方法來(lái)觸發(fā)它。

例如:將系統(tǒng)默認(rèn)的狀態(tài)欄樣式修改為 lightContent昨寞,我們可以在控制器的 viewDidLoad() 方法中去觸發(fā)它:

override var preferredStatusBarStyle: UIStatusBarStyle {

? return .lightContent

}

override func viewDidLoad() {

? super.viewDidLoad()

? // 主動(dòng)觸發(fā)來(lái)更新?tīng)顟B(tài)欄樣式? ?

? setNeedsStatusBarAppearanceUpdate()

}

使用了系統(tǒng)導(dǎo)航控制器的情況

如果我們使用了系統(tǒng)導(dǎo)航控制器 UINavigationController瞻惋,那么即使在 UIViewController 中重寫(xiě)了 preferredStatusBarStyle 可讀屬性,并且主動(dòng)去調(diào)用了 setNeedsStatusBarAppearanceUpdate() 方法援岩,preferredStatusBarStyle 屬性也不會(huì)被調(diào)用歼狼,因?yàn)榇藭r(shí)狀態(tài)欄的樣式是根據(jù)導(dǎo)航欄的樣式進(jìn)行自動(dòng)變換的。

如果我們想要修改狀態(tài)欄的樣式窄俏,我們就要主動(dòng)去修改導(dǎo)航欄的樣式蹂匹。當(dāng)然,這種情況下我們就不需要去重寫(xiě) preferredStatusBarStyle 屬性了凹蜈。

例如:修改導(dǎo)航欄樣式為 .black限寞,導(dǎo)航欄文字將為白色,狀態(tài)欄樣式將自動(dòng)變?yōu)?.lightContent:

override func viewDidLoad() {

? super.viewDidLoad()

? navigationController?.navigationBar.barStyle = .black

}

使用了自定義導(dǎo)航控制器的情況

如果我們使用了自定義導(dǎo)航控制器仰坦,那么即使我們做了如上述第2種情況的準(zhǔn)備工作履植,狀態(tài)欄樣式也不能跟隨導(dǎo)航欄樣式進(jìn)行改變。這種情況下悄晃,我們要在自定義的導(dǎo)航控制器中重寫(xiě) childForStatusBarStyle 可讀屬性玫霎,并返回 topViewController。如下:

class CusstomNavigationController: UINavigationController {

? override var childForStatusBarStyle: UIViewController? {

? ? return topViewController

? }

}

在想要改變狀態(tài)欄樣式的控制器中妈橄,只需要重寫(xiě) preferredStatusBarStyle 可讀屬性即可實(shí)現(xiàn)狀態(tài)欄樣式改變:

override var preferredStatusBarStyle: UIStatusBarStyle {

? return .lightContent

}

這種情況不用修改導(dǎo)航欄樣式(不用寫(xiě) navigationController?.navigationBar.barStyle = .black)庶近,也不用主動(dòng)去調(diào)用 setNeedsStatusBarAppearanceUpdate() 方法,因?yàn)樽远x的 CusstomNavigationController 導(dǎo)航控制器中重寫(xiě)的 childForStatusBarStyle 屬性中返回了 topViewController 就是為了告訴系統(tǒng)去調(diào)用棧頂?shù)目刂破鳎╰opViewController)里邊的 preferredStatusBarStyle 屬性值來(lái)更新?tīng)顟B(tài)欄樣式眷蚓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鼻种,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沙热,更是在濱河造成了極大的恐慌叉钥,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篙贸,死亡現(xiàn)場(chǎng)離奇詭異投队,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)爵川,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門敷鸦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事轧膘〕” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵谎碍,是天一觀的道長(zhǎng)鳞滨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蟆淀,這世上最難降的妖魔是什么拯啦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮熔任,結(jié)果婚禮上褒链,老公的妹妹穿的比我還像新娘。我一直安慰自己疑苔,他們只是感情好甫匹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著惦费,像睡著了一般兵迅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上薪贫,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天恍箭,我揣著相機(jī)與錄音,去河邊找鬼瞧省。 笑死扯夭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鞍匾。 我是一名探鬼主播交洗,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橡淑!你這毒婦竟也來(lái)了藕筋?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梳码,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后伍掀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掰茶,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蜜笤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了濒蒋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沪伙,靈堂內(nèi)的尸體忽然破棺而出瓮顽,到底是詐尸還是另有隱情,我是刑警寧澤围橡,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布暖混,位于F島的核電站,受9級(jí)特大地震影響翁授,放射性物質(zhì)發(fā)生泄漏拣播。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一收擦、第九天 我趴在偏房一處隱蔽的房頂上張望贮配。 院中可真熱鬧,春花似錦塞赂、人聲如沸泪勒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)圆存。三九已至,卻和暖如春鳍置,著一層夾襖步出監(jiān)牢的瞬間辽剧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工税产, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怕轿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓辟拷,卻偏偏與公主長(zhǎng)得像撞羽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衫冻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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