事先申明:所有android 類型的學習記錄全部基於《第一行代碼 Android》第三版,在此感謝郭霖老師的書籍幫助。 1.手動創建Activity 在Project類型目錄中尋找到 項目/app/src/main/java/com.example.activitytest 在 com.exampl ...
要求:iOS13.0以上
重點:需要所有界面進行適配,工作量巨大,需要從項目開始就進行適配;H5界面無法進行適配
實現方式:System Colors(常用)、Semantic Colors(常用)、Dynamic Colors(常用)、Asset Catalog、Border colors、Dynamic Images
1.System Colors:
Apple為了適配深色模式對UIKit中的UIColor進行了重新定義,具體顏色代碼值可查看apple官方文檔,例如將.red, .blue和 .yellow定義為.systemRed,.systemBlue和.systemYellow,這些新定義的System Colors在深色和淺色模式下表現為不同的顏色。
2.Semantic Colors:
對於一些需要進行文字顯示的控制項apple也做了深色模式的適配,Apple新加了Semantic Colors顏色方案,使用Semantic Colors時不需要糾結具體的值,只需要在合適的場景使用,例如當控制項是Label時,在沒有自定義字體顏色時,可以使用.label類型的的Semantic Colors,在淺色模式下顯示黑色字體,在深色模式下顯示白色字體;Semantic Colors包括.label,.separator,.link, .systemBackground和.systemFill。
3.Dynamic Colors(自定義顏色):
在實際開發中很多情況下我們都是需要自定義顏色的,Apple也給出了相應的方案,那就是通過UIColor.init(dynamicProvider: @escaping (UITraitCollection) -> UIColor)這個方法進行創建自定義的semantic color。
為系統類UIColor寫一個擴展
public extension UIColor { static func | (lightMode: UIColor, darkMode: UIColor) -> UIColor { guard #available(iOS 13.0, *) else { return lightMode } return UIColor { (traitCollection) -> UIColor in return traitCollection.userInterfaceStyle == .light ? lightMode : darkMode } } }
4.Asset Catalog:
在asset裡面預先保存自定義顏色,在Any Appearence(淺色模式)和Dark Appearence(深色模式)分別添加一種顏色即可。一般用於高度重覆的顏色,比如主題色等,需要UI高度統一顏色標準。
支持代碼使用:view.backdroundcolor = Color(named: “自定義顏色名”)
5.Border colors:
Border colors在當主題模式發生改變時並不會自動的進行適配,所以需要手動的進行處理,可以通過traitCollectionDidChange(_:)這個方法在進行處理:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
traitCollection.hasDifferentColorAppearance(comparedTo: traitCollection) {
layer.backgroundColor = UIColor.layer.cgColor
}
}
6.Dynamic Images:
圖片資源同樣支持深色模式,需要使用Assets.xcassets,新建一個Assets.xcassets併在Attributes inspector點擊Appearances選擇Any, Dark,然後分別為Any Appearances和Dark Appearances配置響應的圖片。
後臺返回圖片時需要自己用代碼創建Assets。
儘量不要使用圖片,無限的增加圖片資源最終會導致包的大小會增加很多。
可以tintColor或者反轉圖片顏色解決改變圖片顏色問題