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 小部件内容