使用颜色资产时不能这样做。但是,您可以创建自己ThemeManger
的主题来处理应用程序的主题。
首先创建一个ThemeManager
. 它的主要目的是保存style
应用程序的。
class ThemeManager {
static let shared: ThemeManager = ThemeManager()
var style: ThemeStyle = .light
}
Run Code Online (Sandbox Code Playgroud)
这里ThemeStyle
应该是一个包含您的主题(浅色、深色等)的枚举。
创建一个ThemeColor
类来处理您的颜色
class ThemeColor {
var dark: UIColor = UIColor.clear
var light: UIColor = UIColor.clear
var asset: String = ""
func getColor(for theme: ThemeStyle = ThemeManager.shared.style) -> UIColor {
if #available(iOS 13.0, *) {
if asset != "", let assetColor = UIColor(named: asset) {
return assetColor
}
}
if theme == .dark {
return dark
}
return light
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该getColor
功能获取所需的颜色。请注意,ThemeColor
返回asset
iOS 13的颜色值。这是为了在用户从设置中更改他/她的偏好时更改应用程序的主题。
例子:
extension UIColor {
class var backgroundColor: ThemeColor {
let themeColor = ThemeColor()
themeColor.light = UIColor.white
themeColor.dark = UIColor.black
themeColor.asset = "backgroundColor"
return themeColor
}
}
// Somewhere in your code set the backgroundColor of your view
myView.backgroundColor = UIColor.backgroundColor.getColor()
Run Code Online (Sandbox Code Playgroud)
style
变量ThemeManger
。你可以通过traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
在你的UIViewController
类中实现这个方法来做到这一点。backgroundColor
示例一样,您需要定义受主题更改影响的所有颜色。style
您的值设置ThemeManger
为您的首选,style
以便您的应用程序在未在 iOS 13 上运行时以其默认主题打开。编辑:如果您的用户将无法从程序本身内改变的应用在自己的主题,那么你不需要light
和dark
的UIColor值ThemeColor
。只需定义一个defaultColor
值并在getColor
函数结束时返回它。这将允许您的应用出现在运行 iOS 12 或更低版本的设备的默认主题中。