我从苹果文档中读到,在今天的小部件中,系统拍摄快照,当需要绘制小部件时,它首先显示快照,然后根据需要执行更新。
为了帮助您的小部件查看最新版本,系统偶尔会捕获 窗口小部件视图的快照。当小部件变得可见时 再次,显示最新的快照,直到系统替换 它有一个实时版本的视图。
要在拍摄快照之前更新窗口小部件的状态,请务必 符合NCWidgetProviding协议。当你的小部件收到 widgetPerformUpdateWithCompletionHandler:调用,更新你的 小部件的视图与最新内容并调用完成 handler,使用以下常量之一来描述结果 更新:
从上面,我希望我的代码行为如下:
在viewDidLoad或widgetPerformUpdateWithCompletionHandler或其他任何地方,在调用NCWidgetProviding协议(例如completionHandler(NCUpdateResult.NewData))之前,我设置了UI。
然后我调用completionHandler(NCUpdateResult.NewData)。
然后系统会拍摄我的用户界面的快照。
当用户关闭并打开今日小部件时,系统会立即显示快照,然后检查是否需要更新。
如果需要更新。
但是,如果我在绘制UI后关闭并打开今日小部件,则它不会像上面那样起作用。
有时,它按照我的预期行事:当我打开小部件时,立即显示我之前的UI,然后更新。
但在其他时候,会显示空白而不是我以前的用户界面,当然UI会重新绘制,但这种“闪烁”很烦人。
我做错了吗?我误解了这份文件吗?可以因为我使用自动布局和布局约束吗?
我已经尝试了所有我能想到的东西,但它有时会起作用而不是其他时间。
如何避免这种烦人的眨眼?
感谢任何帮助或建议。谢谢!
答案 0 :(得分:1)
我终于解决了这个问题。感谢这个帖子(Today Extension view flashes when redrawing)
这是因为我的小部件出于某种原因崩溃了。 (有时我的今天小部件,有时候iOS小部件本身 - 可能是我的错......)
我开始研究它崩溃的原因,但至少现在我知道在哪里挖掘。