iOS 14小工具检测系统主题更改



我在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

最新更新