iOS 13 設(shè)置狀態(tài)欄背景的顏色的坑

對OS開發(fā)人員來講i, 根據(jù)需求修改狀態(tài)欄的背景的很常見的事情

在 iOS 13之前劈伴,修改狀態(tài)欄的背景顏色的方法很簡單

+ (void)setStatusBarBackgroundColor:(UIColor *)color {? ??

? ? ? ? ?UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]; ??

? ? ? ? ? if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) { ? ? ??

? ? ? ? ? statusBar.backgroundColor = color; ? ? ?

? ? ? ? ? }

}

但是系統(tǒng)升級到iOS 13 之后氢妈,私有KVC??iOS不允許valueForKey非竿、setValue: forKey獲取和設(shè)置私有屬性

坑一:這個時候修改狀態(tài)欄(電池欄的)在用之前的方法會閃退

解決辦法:適配iOS 13? 增加代碼

+ (void)setStatusBarBackgroundColor:(UIColor *)color {

? ? if(@available(iOS13.0, *)) {

? ? ? ? ? ?UIView*?statusBar = [[UIView alloc] initWithFrame:[UIApplication sharedApplication].keyWindow.windowScene.statusBarManager.statusBarFrame] ;

? ? ? ? ? ? [[UIApplication sharedApplication].keyWindow addSubview:statusBar];

? ? ? ? ? ?statusBar.backgroundColor= color;

? ? ? ? }?else?{

? ? ? ? ? ? statusBar.backgroundColor= color;

? ? ? ? }

? ? }else{

? ? ? ? UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

? ? ? ? if([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {

? ? ? ? ? ? statusBar.backgroundColor= color;

? ? ? ? }

? ? }

}


坑2:如果整個項目的狀態(tài)欄(電池欄)都是有顏色的型豁,并且都是不透明的,上面這個方法完全可以應(yīng)付

但是:如果有狀態(tài)是有透明或者半透明的效果互纯,上面這個方法還是不能勝任瑟幕,越透明越明顯;經(jīng)過一番查找留潦,終于發(fā)現(xiàn)問題:

問題: iOS 13之前只盹,可以通過valueForKey 獲取UIApplication的statusBar,因為UIApplication是單例兔院,因此殖卑,在iOS 12,通過:?[[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"]拿到的statusBar永遠(yuǎn)是同一個對象坊萝。不行可以打印出內(nèi)存地址看下就很清楚了孵稽。iOS 13之后许起,因為蘋果不允許使用KVC的valueForKey訪問私有屬性。通過上面的代碼可以多看點肛冶,每次進(jìn)來都調(diào)用?alloc:init的方法街氢,重新生成一個statusBar;然后添加到UIApplication的keyWindow上睦袖,再設(shè)置背景顏色。因此這個方法多次調(diào)用就會創(chuàng)建多份statusBar荣刑,造成內(nèi)存開銷不說馅笙,如果設(shè)置為透明,根部不能起開效果厉亏。

解決辦法:既然定位到問題所在董习,辦法就是保證iOS 13 之后,每次也都能拿到有去只有一個對象爱只。方法有很多皿淋,我的方法代碼如下:使用 static? 配合 gcd


+ (void)setStatusBarBackgroundColor:(UIColor *)color {

? ? if(@available(iOS13.0, *)) {

? ? ? ? staticUIView*statusBar =nil;

? ? ? ? if(!statusBar) {

? ? ? ? ? ? staticdispatch_once_tonceToken;

? ? ? ? ? ? dispatch_once(&onceToken, ^{

? ? ? ? ? ? ? ? statusBar = [[UIView alloc] initWithFrame:[UIApplication sharedApplication].keyWindow.windowScene.statusBarManager.statusBarFrame] ;

? ? ? ? ? ? ? ? [[UIApplication sharedApplication].keyWindow addSubview:statusBar];

? ? ? ? ? ? ? ? statusBar.backgroundColor= color;

? ? ? ? ? ? });

? ? ? ? }else{

? ? ? ? ? ? statusBar.backgroundColor= color;

? ? ? ? }

? ? }else{

? ? ? ? UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

? ? ? ? if([statusBarrespondsToSelector:@selector(setBackgroundColor:)]) {

? ? ? ? ? ? statusBar.backgroundColor= color;

? ? ? ? }

? ? }

}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恬试,一起剝皮案震驚了整個濱河市窝趣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌训柴,老刑警劉巖哑舒,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異幻馁,居然都是意外死亡洗鸵,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門仗嗦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膘滨,“玉大人,你說我怎么就攤上這事稀拐』鸬耍” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵钩蚊,是天一觀的道長贡翘。 經(jīng)常有香客問我,道長砰逻,這世上最難降的妖魔是什么鸣驱? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮蝠咆,結(jié)果婚禮上踊东,老公的妹妹穿的比我還像新娘北滥。我一直安慰自己,他們只是感情好闸翅,可當(dāng)我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布再芋。 她就那樣靜靜地躺著,像睡著了一般坚冀。 火紅的嫁衣襯著肌膚如雪济赎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天记某,我揣著相機與錄音司训,去河邊找鬼。 笑死液南,一個胖子當(dāng)著我的面吹牛壳猜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滑凉,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼统扳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了畅姊?” 一聲冷哼從身側(cè)響起咒钟,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涡匀,沒想到半個月后盯腌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡陨瘩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年腕够,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舌劳。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡帚湘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甚淡,到底是詐尸還是另有隱情大诸,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布贯卦,位于F島的核電站资柔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撵割。R本人自食惡果不足惜贿堰,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啡彬。 院中可真熱鬧羹与,春花似錦故硅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腾誉,卻和暖如春徘层,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妄辩。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工惑灵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眼耀。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像佩憾,于是被迫代替她去往敵國和親哮伟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,446評論 2 359

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