iPadOS 14设备首次运行App时应用图标角标闪烁消失问题
iPadOS 14 应用内设置图标角标首次运行异常问题
测试环境
我在运行iPadOS 14的iPad上发现了该异常行为,测试所用模拟器和物理设备均为14.5版本,实体机升级到了14.5.1版本。
本次需求为基于App内部的业务逻辑展示带数值的图标角标,不涉及外部推送通知服务。
实现代码
1. 计数ViewModel
我搭建了ViewModel来追踪通知角标需要展示的数值:
import Combine import Foundation class CounterViewModel: ObservableObject { @Published private(set) var notificationCount = 42 func up() { self.notificationCount += 1 } func down() { self.notificationCount -= 1 } }
2. 角标同步逻辑
我通过ContentView的.onAppear方法将数值同步到App图标通知角标:
struct ContentView: View { @EnvironmentObject var counterViewModel: CounterViewModel @State private var counterCancellable: AnyCancellable? var body: some View { Text("Hello World!") .onAppear { UNUserNotificationCenter.current().requestAuthorization(options: .badge) { _, error in if error == nil { self.counterCancellable = self.counterViewModel.$notificationCount.sink { count in DispatchQueue.main.async { UIApplication.shared.applicationIconBadgeNumber = count } } } } } } }
3. 全局实例注入
最后我在App层级设置了EnvironmentObject,方便计数逻辑关联的所有视图共享该实例:
struct IBreviaryApp: App { @ObservedObject private var counterViewModel = CounterViewModel() var body: some Scene { WindowGroup { ContentView() .environmentObject(self.counterViewModel) } } }
问题表现
仅在App首次运行时,同意通知权限弹窗后,将App切到后台时图标上的角标会先显示,随后突然消失,程序坞中甚至完全不显示。
后续触发以下任意操作角标会恢复正常显示:
- 点击App图标(不管是程序坞还是桌面的图标),角标会在App打开的动画中出现
- 在已安装应用的不同页面间滑动,回到App所在页面后,角标就会固定显示
- 打开其他App,程序坞的最近使用应用列表展示新App时,App角标也会在程序坞中出现,且本次会保持显示
重启iPad或者重装App可以解决该问题,但App首次运行时该问题必定出现。
补充信息
编辑: 已上传可复现问题的代码仓库,要复现该问题,需要通过其他函数修改计数值。
编辑2: 已上传演示视频,正如仓库中所示,为了模拟其他交互,我添加了5秒延迟,之后将计数器数值设置为42。
内容的提问来源于stack exchange,提问作者Valerio
相关产品推荐
相关产品推荐

