1

我从苹果文档中读到,在今天的小部件中,系统拍摄快照,当需要绘制小部件时,它首先显示快照,然后在需要时执行更新。

为了帮助您的小部件保持最新状态,系统有时会捕获小部件视图的快照。当小部件再次可见时,将显示最近的快照,直到系统将其替换为视图的实时版本。

要在拍摄快照之前更新小部件的状态,请务必遵守 NCWidgetProviding 协议。当您的小部件收到 widgetPerformUpdateWithCompletionHandler: 调用时,使用最新内容更新小部件的视图并调用完成处理程序,使用以下常量之一来描述更新结果:

从上面,我希望我的代码表现得像这样:

  1. 在 viewDidLoad 或 widgetPerformUpdateWithCompletionHandler 或任何地方,在调用 NCWidgetProviding 协议(例如 completionHandler(NCUpdateResult.NewData))之前,我设置了 UI。

  2. 然后我调用completionHandler(NCUpdateResult.NewData)。

  3. 然后系统会拍摄我的 UI 的快照。

  4. 当用户关闭并打开今天的小部件时,系统会立即显示快照,然后检查是否需要更新。

  5. 如果需要,请更新。

但是,如果我在绘制 UI 后关闭并打开今天的小部件,它不会像上面那样运行。

有时,它会像我预期的那样运行:当我打开小部件时,我以前的 UI 会立即显示,然后它会更新。

但在其他时候,会显示空白而不是我以前的 UI,然后当然会重绘 UI,但这种“闪烁”很烦人。

我做错了什么吗?我误解了文件吗?可能是因为我使用了自动布局和布局约束吗?

我已经尝试了我能想到的一切,但它有时会起作用,有时会不起作用。

如何避免这种烦人的眨眼?

任何帮助或建议表示赞赏。谢谢!

4

1 回答 1

1

我终于解决了这个问题。感谢这个线程(重绘时今天扩展视图会闪烁

这是因为我的小部件由于某种原因崩溃了。(有时是我今天的小部件,有时是 iOS 小部件本身——可能是我的错..)

我必须研究它为什么会崩溃,但至少现在我知道在哪里挖掘。

于 2015-01-25T14:28:22.047 回答