问题描述
我正在为ios 14 Home Widget开发一个应用程序,并且在显示当前时间(数字时钟)时该小部件没有每秒更新时遇到一个问题。众所周知,Apple不允许每秒触发时间轴,是否还有其他方法可以通过实时更新显示当前时间?
我尝试了这些方法,但无法正常工作
setosa
解决方法
不允许您每秒刷新小部件 。那是Apple的限制。
您能做的就是以 seconds 显示日期
使用timer
日期样式:
/// A style displaying a date as timer counting from now.
///
/// Text(event.startDate,style: .timer)
///
/// Example output:
/// 2:32
/// 36:59:01
public static let timer: Text.DateStyle
- 您需要一个具有
Entry
属性的简单Date
:
struct SimpleEntry: TimelineEntry {
let date: Date
}
- 在
Entry
中传递给定日期的午夜日期,并在下一个午夜之后刷新时间轴:
struct SimpleProvider: TimelineProvider {
...
func getTimeline(in context: Context,completion: @escaping (Timeline<Entry>) -> Void) {
let midnight = Calendar.current.startOfDay(for: Date())
let nextMidnight = Calendar.current.date(byAdding: .day,value: 1,to: midnight)!
let entries = [SimpleEntry(date: midnight)]
let timeline = Timeline(entries: entries,policy: .after(nextMidnight))
completion(timeline)
}
}
- 使用
timer
样式显示日期:
struct SimpleWidgetEntryView: View {
var entry: SimpleProvider.Entry
var body: some View {
Text(entry.date,style: .timer)
}
}
请注意,当刷新时间轴(通过指定TimelineReloadPolicy
或调用WidgetCenter
)时,您设置了最早时间 的时间窗口小部件将会刷新。
不能保证在特定时间刷新 。