iOS 14 Widget 检测系统主题更改

Cos*_*min 3 swift widgetkit swiftui ios14

我在getTimeline 中使用以编程方式生成的 UIImage 构建我的小部件。

所以我需要在getTimeline 中知道iOS 主题是 Light 还是 Dark。

我知道如何在带有 的 ViewController 中执行此操作traitCollection.userInterfaceStyle == .dark,但是如何在 Widget 中执行此操作?

paw*_*222 5

尽管 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意当系统配色方案改变时:

  • 仅重绘您的视图,getTimeline不会再次调用该函数
  • 当系统配色方案更改时,默认颜色会自动更改

这是一个GitHub 存储库,其中包含不同的小部件示例,包括环境小部件。