以下是小部件扩展的代码示例.
通过使用.environment(\.colorScheme, ...)
,我能够使用正确的主题感知命名 colored颜色 来更新视图.
但是,我无法从主题感知命名 colored颜色 中检索到正确的RGB值.
private func getColorScheme() -> ColorScheme {
if ... {
return ColorScheme.dark
} else {
return ColorScheme.light
}
}
@ViewBuilder
func contentView() -> some View {
// Light/ dark theme aware
let color = SwiftUI.Color("yellowNoteColor")
calculate(color)
HStack {
...
}
.background(color)
.environment(\.colorScheme, getColorScheme())
}
func calculate(_ color: SwiftUI.Color) {
var a: CGFloat = 0.0
var r: CGFloat = 0.0
var g: CGFloat = 0.0
var b: CGFloat = 0.0
let uiColor = UIColor(self)
uiColor.getRed(&r, green: &g, blue: &b, alpha: &a)
// !!! Always get the light theme color value !!!
}
在calculate
函数内,检索到的值始终为浅色主题 colored颜色 值.
我的猜测是,caculate
函数在.environment(\.colorScheme, getColorScheme())
之前执行,这就是为什么我们总是得到浅色主题 colored颜色 值.
请问,如何从主题感知命名 colored颜色 中获取正确的RGB值?
附注:(用谷歌翻译翻译)
在主应用程序中,我们可以使用overrideUserInterfaceStyle
来更改主应用程序主题,然后根据选定的主应用程序主题检索正确的RGB.
但是,我不确定我们如何在WidgetKit
年内做到这一点.