從iOS13推出以后,暗黑模式難免成為一個熱點的話題氧枣,特別是微信新版本更新支持暗黑模式以后沐兵,相信iOS開發(fā)者都有必要掌握如何在自己的項目中支持它。
適配暗黑模式主要從以下幾個方面著手:
顏色
圖片
1便监、顏色適配
iOS13 之前 UIColor只能表示一種顏色扎谎,而從 iOS13 開始UIColor是一個動態(tài)的顏色碳想,在Light Mode和Dark Mode可以分別設置不同的顏色。
iOS13系統(tǒng)提供了一些動態(tài)顏色毁靶,不過日常開發(fā)中胧奔,我們很少用到系統(tǒng)的顏色。比如說placeholderTextColor预吆,就可以使用[UIColor placeholderTextColor]直接表示輸入框提示文字顏色龙填,系統(tǒng)會根據(jù)當前的模式自動切換。
自定義動態(tài)UIColor
iOS13 UIColor增加了兩個初始化方法拐叉,使用以下方法可以創(chuàng)建動態(tài)UIColor
注:一個是類方法岩遗,一個是實例方法
+(UIColor*)colorWithDynamicProvider:(UIColor*(^)(UITraitCollection*))dynamicProviderAPI_AVAILABLE(ios(13.0),tvos(13.0))API_UNAVAILABLE(watchos);
-(UIColor*)initWithDynamicProvider:(UIColor*(^)(UITraitCollection*))dynamicProviderAPI_AVAILABLE(ios(13.0),tvos(13.0))API_UNAVAILABLE(watchos);
這兩個方法要求傳一個block進去
當系統(tǒng)在LightMode和DarkMode之間相互切換時就會觸發(fā)此回調(diào)
這個block會返回一個UITraitCollection類
我們需要使用其屬性userInterfaceStyle,它是一個枚舉類型巷嚣,會告訴我們當前是LightMode還是DarkMode
使用方法
label.textColor=UIColor.init(dynamicProvider: { (trait) ->UIColor **in**
**if **trait.userInterfaceStyle== .light {
**return **UIColor.black
}
**return **UIColor.white
})
self.view.backgroundColor=UIColor.init(dynamicProvider: { (trait) ->UIColor in
if trait.userInterfaceStyle== .dark {
returnUIColor.black
}
**return**UIColor.white
})
效果
2喘先、圖片適配
打開Assets.xcassets
新建一個Image set
打開右側(cè)工具欄,點擊最后一欄廷粒,找到Appearances窘拯,選擇Any,Dark坝茎,如圖
*使用該圖片
[_logoImage setImage:[UIImage imageNamed:@"icon_logo"]];
獲取當前系統(tǒng)模式
如果需要知道當前處于什么模式涤姊,并根據(jù)不同的模式執(zhí)行不同的操作,iOS13中CGColor依然只能表示單一的顏色嗤放,通過調(diào)用UITraitCollection.currentTraitCollection.userInterfaceStyle思喊,獲取當前模式
if UITraitCollection.current.userInterfaceStyle == .dark {
print("當前為深色模式")
}else{
print("當前為淺色模式")
}
希望對您有所幫助。