1

Appleのドキュメントから、今日のウィジェットではシステムがスナップショットを取得し、ウィジェットを描画する必要がある場合は、最初にスナップショットを表示してから、必要に応じて更新を実行することを読みました。

ウィジェットを最新の状態に保つために、システムはウィジェットのビューのスナップショットをときどきキャプチャします。ウィジェットが再び表示されると、システムがビューのライブ バージョンに置き換えるまで、最新のスナップショットが表示されます。

スナップショットが取得される前にウィジェットの状態を更新するには、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