【问题标题】:SwiftUI Widget fails to refreshSwiftUI 小部件无法刷新
【发布时间】: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 分钟进行测试。
  • 为什么不直接从当前日期开始设置?不是一天的开始?

标签: swift swiftui widgetkit


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2020-11-28
    • 2021-01-10
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多