iOS13-適配夜間模式/深色外觀(Dark Mode)

今天的 WWDC 19 上發(fā)布了 iOS 13足绅,我們來看下如何適配 DarkMode摩泪。首先我們來看下效果圖

image

DarkMode 主要從兩個方面去適配笆焰,顏色和圖片

顏色適配

iOS 13 下 UIColor 增加了一個初始化方法,我們可以用這個初始化方法完成 DarkMode 的適配

@available(iOS 13.0, *)
public init(dynamicProvider: @escaping (UITraitCollection) -> UIColor)

這個方法要求傳一個閉包進去见坑,當系統(tǒng)從 LightMode 和 DarkMode 之間切換的時候就會觸發(fā)這個回調嚷掠。
這個閉包返回一個 UITraitCollection 類,我們要用這個類的 userInterfaceStyle 屬性荞驴。
userInterfaceStyle 是一個枚舉叠国,聲明如下

@available(iOS 12.0, *)
public enum UIUserInterfaceStyle : Int {
    case unspecified
    case light
    case dark
}

這個枚舉會告訴我們當前是 LightMode or DarkMode


現(xiàn)在我們創(chuàng)建兩個 UIColor 并賦值給 view.backgroundColorlabel,代碼如下

let backgroundColor = UIColor { (traitCollection) -> UIColor in
    switch traitCollection.userInterfaceStyle {
    case .light:
        return UIColor.white
    case .dark:
        return UIColor.black
    default:
        fatalError()
    }
}
view.backgroundColor = backgroundColor

let labelColor = UIColor { (traitCollection) -> UIColor in
    switch traitCollection.userInterfaceStyle {
    case .light:
        return UIColor.black
    case .dark:
        return UIColor.white
    default:
        fatalError()
    }
}
label.textColor = labelColor

現(xiàn)在戴尸,我們做完了背景色和文本顏色的適配,接下來我們看看圖片如何適配

圖片適配

打開 Assets.xcassets
把圖片拖拽進去冤狡,我們可以看到這樣的頁面

image

然后我們在右側工具欄中點擊最后一欄孙蒙,點擊 Appearances 選擇 Any, Dark,如圖所示

image

我們把 DarkMode 的圖片拖進去悲雳,如圖所示

image

最后我們加上 ImageView 的代碼

imageView.image = UIImage(named: "icon")

現(xiàn)在我們就已經完成顏色和圖片的 DarkMode 適配挎峦,是不是很簡單呢 (手動滑稽)


如何獲取當前樣式 (Light or Dark)

我們可以看到,不管是顏色還是圖片合瓢,適配都是系統(tǒng)完成的坦胶,我們不用關心現(xiàn)在是什么樣的樣式。
但是在某些場景下晴楔,我們可能會有根據(jù)當前樣式來做一些其他適配的需求顿苇,這時我們就需要知道現(xiàn)在什么樣式。
我們可以在 UIViewControllerUIView 中調用 traitCollection.userInterfaceStyle 來獲取當前樣式税弃,代碼如下

switch traitCollection.userInterfaceStyle {
case .unspecified:
    print("unspecified")
case .light:
    print("light")
case .dark:
    print("dark")
}

為什么要強調當前呢纪岁,因為默認情況下使用 traitCollection.userInterfaceStyle 屬性就能獲取到當前系統(tǒng)的樣式。
但是我們可以通過 overrideUserInterfaceStyle 屬性強制設置 UIViewControllerUIView 的樣式则果,代碼如下

overrideUserInterfaceStyle = .dark
print(traitCollection.userInterfaceStyle)  // dark

我們可以看到設置了 overrideUserInterfaceStyle 之后幔翰,traitCollection.userInterfaceStyle 就是設置后的樣式了。
注意:overrideUserInterfaceStyle 默認值為 unspecified 西壮,所以一定要用 traitCollection.userInterfaceStyle 來判斷當前樣式遗增,而不是用 overrideUserInterfaceStyle 來判斷。


注意:以上代碼是我自己摸索出來的款青,在真機上也能達到效果做修,但是不建議現(xiàn)在就開始做 DarkMode 的適配。畢竟官方關于 DarkMode 適配的 session 還沒出,建議等 session 出了之后在做適配缓待,另外如果有和官方有出入我會及時補充修改~

作者:RayJiang97
鏈接:http://www.reibang.com/p/e6616e44cf60

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蚓耽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子旋炒,更是在濱河造成了極大的恐慌步悠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘫镇,死亡現(xiàn)場離奇詭異鼎兽,居然都是意外死亡,警方通過查閱死者的電腦和手機铣除,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門谚咬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尚粘,你說我怎么就攤上這事择卦。” “怎么了郎嫁?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵秉继,是天一觀的道長。 經常有香客問我泽铛,道長尚辑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任盔腔,我火速辦了婚禮杠茬,結果婚禮上,老公的妹妹穿的比我還像新娘弛随。我一直安慰自己瓢喉,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布舀透。 她就那樣靜靜地躺著灯荧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盐杂。 梳的紋絲不亂的頭發(fā)上逗载,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音链烈,去河邊找鬼厉斟。 笑死,一個胖子當著我的面吹牛强衡,可吹牛的內容都是我干的擦秽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼感挥!你這毒婦竟也來了缩搅?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤触幼,失蹤者是張志新(化名)和其女友劉穎硼瓣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體置谦,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡堂鲤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了媒峡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘟栖。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谅阿,靈堂內的尸體忽然破棺而出半哟,到底是詐尸還是另有隱情,我是刑警寧澤签餐,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布寓涨,位于F島的核電站,受9級特大地震影響贱田,放射性物質發(fā)生泄漏。R本人自食惡果不足惜嘴脾,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一男摧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧译打,春花似錦耗拓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至韵洋,卻和暖如春竿刁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搪缨。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工食拜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人副编。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓负甸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呻待,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容