我在getTimeline中用程序生成的UIImage构建我的小部件。
因此,我需要在getTimeline中知道iOS主题是浅色还是深色。
我知道如何在带有traitCollection.userInterfaceStyle == .dark
的ViewController中做到这一点,但我如何在Widget中做到呢?
尽管Widget视图是静态的,但您仍然可以检测到@Environment(.colorScheme)
。
这里有一个简单的演示:
struct WidgetEntryView: View {
@Environment(.colorScheme) var colorScheme
var entry: Provider.Entry
var bgColor: some View {
colorScheme == .dark ? Color.red : Color.orange
}
var body: some View {
ZStack {
bgColor
Text(entry.date, style: .time)
}
}
}
注意,当系统配色方案发生变化时:
- 只有视图被重新绘制,
getTimeline
函数不会再次调用 - 当系统配色方案更改时,默认颜色会自动更改
这里是一个GitHub存储库,包含不同的Widget示例,包括环境Widget