Swift 外观更改时更新小部件

Swift 外观更改时更新小部件,swift,swiftui,ios14,widgetkit,Swift,Swiftui,Ios14,Widgetkit,我需要知道你们中是否有人知道SwiftUI中的一个系统在外观从亮模式变为暗模式时更新小部件,反之亦然 我可以更改文本和图像,但我使用一种方法来显示地图的屏幕截图,每次外观更改时我都应该运行它以获得正确的地图颜色 为每个主题创建两个屏幕截图,并将其传递到条目中: 为每个主题创建两个屏幕截图,并将其传递到条目中: 谢谢@pawello2222好主意,我没想过。。。只有一个问题:我使用MKMapSnapshotter方法生成屏幕截图,但无法定义地图外观。在文档中,我发现了一个实例属性外观,但它是一个N

我需要知道你们中是否有人知道SwiftUI中的一个系统在外观从亮模式变为暗模式时更新小部件,反之亦然

我可以更改文本和图像,但我使用一种方法来显示地图的屏幕截图,每次外观更改时我都应该运行它以获得正确的地图颜色

为每个主题创建两个屏幕截图,并将其传递到条目中: 为每个主题创建两个屏幕截图,并将其传递到条目中:
谢谢@pawello2222好主意,我没想过。。。只有一个问题:我使用MKMapSnapshotter方法生成屏幕截图,但无法定义地图外观。在文档中,我发现了一个实例属性外观,但它是一个NSAppearance属性,因此我无法在iOS中使用它。。。你有什么想法吗?让traitCollectionLight=UITraitCollection.inituserInterfaceStyle:UIUserInterfaceStyle.lightmapSnapshotOptions.traitCollection=TraitCollectionLightThank@pawello2222好主意,我没想过。。。只有一个问题:我使用MKMapSnapshotter方法生成屏幕截图,但无法定义地图外观。在文档中,我发现了一个实例属性外观,但它是一个NSAppearance属性,因此我无法在iOS中使用它。。。你知道吗?让traitCollectionLight=UITraitCollection.inituserInterfaceStyle:UIUserInterfaceStyle.lightmapSnapshotOptions.traitCollection=traitCollectionLight
struct SimpleEntry: TimelineEntry {
    let date: Date
    let mapScreenshots: [ColorScheme: Image]
}
struct Provider: TimelineProvider {
    ...

    func getTimeline(in context: Context, completion: @escaping (Timeline<SimpleEntry>) -> Void) {
        let entry = SimpleEntry(
            date: Date(),
            mapScreenshots: [
                // replace with actual map screenshots
                .dark: Image(systemName: "plus"),
                .light: Image(systemName: "minus"),
            ]
        )
        let timeline = Timeline(entries: [entry], policy: .never)
        completion(timeline)
    }
}
struct WidgetEntryView: View {
    @Environment(\.colorScheme) var colorScheme

    var entry: Provider.Entry

    var body: some View {
        if let screenshot = entry.mapScreenshots[colorScheme] {
            screenshot
        }
    }
}