SwiftUI 小部件无法刷新

Posted

技术标签:

【中文标题】SwiftUI 小部件无法刷新【英文标题】:SwiftUI Widget fails to refresh 【发布时间】:2021-11-18 20:15:02 【问题描述】:

我正在尝试在 SwiftUI 上创建一个小部件。该小部件应该每小时刷新一次。但是,小部件无法重新加载。

虽然故障排除注意到,当我从设置中手动更改时间时,小部件确实会更新。

func getTimeline(for configuration: MyWidgetSelectionIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) 
        var entries: [SimpleEntry] = []


        let currentDate = Date()
        
        let midnight = Calendar.current.startOfDay(for: currentDate)

        for offset in 0 ..< 24
            let entryDate = Calendar.current.date(byAdding: .hour, value: offset, to: midnight)!
            entries.append(SimpleEntry(date: entryDate, configuration: configuration))

        
        
        let timeline = Timeline(entries: entries, policy: .atEnd)
        completion(timeline)
        

【问题讨论】:

如何知道是否重新加载失败?您是否在小部件中呈现刷新日期并等待 1 小时? 我正在小部件上显示当前设备时间,并手动将设备时间设置为提前 59 分钟进行测试。 为什么不直接从当前日期开始设置?不是一天的开始? 【参考方案1】:

getTimeline() 返回时,WidgetKit 会呈现所有条目的视图,因此如果您在每个条目中呈现当前时间,那么它们都会显示相同的时间。

如果您从 SimpleEntry 渲染 date 属性而不是当前时间,那么您应该会看到它发生了变化。

我怀疑当您手动更改设备时间时它会起作用,因为 WidgetKit 再次调用 getTimeline()

【讨论】:

以上是关于SwiftUI 小部件无法刷新的主要内容,如果未能解决你的问题,请参考以下文章

如何将 uiviewcontroller 数据传递给 swiftui 小部件类

URLImage 从不在 SwiftUI 的小部件应用程序中加载图像 [重复]

每 5 分钟或定期刷新 Flutter Text 小部件内容

SwiftUI 小部件中的 UIKit UserDefaults

SwiftUI 中的小部件 UI 预览

解决 三星Note3 桌面小部件不实时更新/不刷新 的问题