我从苹果文档中读到,在今天的小部件中,系统拍摄快照,当需要绘制小部件时,它首先显示快照,然后在需要时执行更新。
为了帮助您的小部件保持最新状态,系统有时会捕获小部件视图的快照。当小部件再次可见时,将显示最近的快照,直到系统将其替换为视图的实时版本。
要在拍摄快照之前更新小部件的状态,请务必遵守 NCWidgetProviding 协议。当您的小部件收到 widgetPerformUpdateWithCompletionHandler: 调用时,使用最新内容更新小部件的视图并调用完成处理程序,使用以下常量之一来描述更新结果:
从上面,我希望我的代码表现得像这样:
在 viewDidLoad 或 widgetPerformUpdateWithCompletionHandler 或任何地方,在调用 NCWidgetProviding 协议(例如 completionHandler(NCUpdateResult.NewData))之前,我设置了 UI。
然后我调用completionHandler(NCUpdateResult.NewData)。
然后系统会拍摄我的 UI 的快照。
当用户关闭并打开今天的小部件时,系统会立即显示快照,然后检查是否需要更新。
如果需要,请更新。
但是,如果我在绘制 UI 后关闭并打开今天的小部件,它不会像上面那样运行。
有时,它会像我预期的那样运行:当我打开小部件时,我以前的 UI 会立即显示,然后它会更新。
但在其他时候,会显示空白而不是我以前的 UI,然后当然会重绘 UI,但这种“闪烁”很烦人。
我做错了什么吗?我误解了文件吗?可能是因为我使用了自动布局和布局约束吗?
我已经尝试了我能想到的一切,但它有时会起作用,有时会不起作用。
如何避免这种烦人的眨眼?
任何帮助或建议表示赞赏。谢谢!