在iOS18.2上,小组件的刷新机制貌似存在问题。在时间线函数上设置多个Entry,期待按照既定的顺序执行。
显示按钮:
var isAudibleArming = false
struct ControlToggleAudibleArmingStyle: ToggleStyle {
func makeBody(configuration: Configuration) -> some View {
Image("icon_sound", bundle: Bundle.main).foregroundColor(.clear)
}
}
Toggle(isOn: isAudibleArming, intent: XXXIntent()) {}.toggleStyle(ControlToggleAudibleArmingStyle())
过程:点击了Button或者Toggle(现象一致)
struct XXXIntent: AppIntent {
static var title: LocalizedStringResource = "XXXIntent"
func perform() async throws -> some IntentResult {
isAudibleArming = true
return .result()
}
}
触发了时间线函数:
func timeline(for configuration: EmergencyAlarmWidgetIntent, in context: Context) async -> Timeline<Entry> {
var entries: [Entry] = []
let currentDate = Date()
let alarmModel = alarmModel(for: configuration)
let entry = Entry(date: currentDate, alarmModel: alarmModel,type: .loading)
entries.append(entry) //显示loading
if (isAudibleArming) { //2秒后切换样式
let entry1 = Entry(date: currentDate.adding(.second, value: 2), alarmModel: alarmModel,type: .bindDevice)
entries.append(entry1)
}
return Timeline(entries:entries, policy: .atEnd)
}
实际结果: 在iOS17上一切正常,loading和2秒后切换样式都可以达到效果。但是在ios 18上,发现点击按钮后,立即显示了2秒后的切换样式,loading被一闪而过。