问题描述
我在 getTimeline 中使用程序生成的UIImage构造小部件。
所以我需要在 getTimeline 中知道iOS主题是浅色还是深色。
我知道如何使用fs.access(...)
在ViewController中执行此操作,但是如何在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 repository,带有不同的小部件示例,包括环境小部件。