我在getTimeline中使用以编程方式生成的 UIImage 构建我的小部件。
所以我需要在getTimeline中知道iOS 主题是 Light 还是 Dark。
我知道如何在 ViewController 中执行此操作traitCollection.userInterfaceStyle == .dark
,但是如何在 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 示例,包括 Environment Widget。