【问题标题】:iOS 14 Widget not updateiOS 14 小部件未更新
【发布时间】:2021-03-14 03:50:08
【问题描述】:

我正在尝试构建一个 IOS 14 小部件,它每两分钟更新一次。这是小部件代码:

import WidgetKit
import SwiftUI
import Intents

struct SimpleEntry: TimelineEntry {
    let date: Date
    let configuration: ConfigurationIntent
}

struct Provider: IntentTimelineProvider {
    func placeholder(in context: Context) -> SimpleEntry {
        SimpleEntry(date: Date(), configuration: ConfigurationIntent())
    }

    func getSnapshot(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (SimpleEntry) -> ()) {
        let entry = SimpleEntry(date: Date(), configuration: configuration)
        completion(entry)
    }

    func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
        let entry1 = SimpleEntry(date: Date(), configuration: configuration)

        let timeline = Timeline(entries: [entry1], policy: .after(Date().addingTimeInterval(2*60.0)))
        print("timeline: \(timeline)")
        completion(timeline)
    }
}

struct TeamWidgetEntryView : View {
    @Environment(\.widgetFamily) var family
    var entry: Provider.Entry

    @ViewBuilder
    var body: some View {

        switch family {
            case .systemSmall:
                SmallView(date: Date())
            case .systemMedium:
                MediumView()
            case .systemLarge:
                LargeView()
            default:
                Text("Some other WidgetFamily in the future.")
        }
    }
}

@main
struct TeamWidget: Widget {
    let kind: String = "TeamWidget"

    var body: some WidgetConfiguration {
        IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in
            TeamWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
        .supportedFamilies([.systemSmall,.systemMedium,.systemLarge])
    }
}

这是 SmallView 类:

struct SmallView: View {
    var date: Date

    static let taskDateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.timeStyle = .medium
        return formatter
    }()
    
    var body: some View {
        VStack {
            Text("Small View")
            Text("\(Date(), formatter: Self.taskDateFormat)")
        }
    }
}

我希望小部件每 2 分钟更新一次,但它没有发生,知道是什么问题吗?

【问题讨论】:

标签: ios swift swiftui widget widgetkit


【解决方案1】:

我也遇到了同样的问题,尝试了从 10 秒到 10 分钟的每次更新时间,似乎它只从 5 分钟开始更新内容

【讨论】:

    【解决方案2】:

    这是我用来每分钟更新我的小部件的工具

    func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
                var entries = [SimpleEntry]()
                let currentDate = Date()
                let midnight = Calendar.current.startOfDay(for: currentDate)
                let nextMidnight = Calendar.current.date(byAdding: .day, value: 1, to: midnight)!
                for offset in 0 ..< 60 * 24 {
                    let entryDate = Calendar.current.date(byAdding: .minute, value: offset, to: midnight)!
                    entries.append(SimpleEntry(date: entryDate))
                }
                
                let timeline = Timeline(entries: entries, policy: .after(nextMidnight))
                completion(timeline)
            }
    

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 2021-01-12
      • 2020-10-18
      • 2021-03-05
      • 2023-03-30
      • 2021-06-13
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      相关资源
      最近更新 更多