7

のドキュメントによると-[UIView setNeedsLayout]

このメソッドは即時の更新を強制するのではなく、代わりに次の更新サイクルを待機するため、これらのビューのいずれかが更新される前に複数のビューのレイアウトを無効にするために使用できます。この動作により、すべてのレイアウト更新を 1 つの更新サイクルに統合でき、通常はパフォーマンスが向上します。

素晴らしいですね - しかし、 をsetNeedsLayout呼び出さずに使用するlayoutIfNeededと、コントロールがレイアウトされていないことがわかります。コントロールが次に表示される前に「更新サイクル」が発生することを期待していましたが、そうではないと思います。では、「更新サイクル」とは何ですか?いつ起こりますか?

4

4 に答える 4

3

「更新サイクル」は、現在の実行ループサイクルの最後に発生します。

setNeedsLayout メインスレッド(メインランループ)で呼び出す必要があります。

于 2012-07-02T12:28:16.053 に答える
0

それは奇妙です、私は変更して「[self setNeedsLayout]」と呼ぶ多くのカスタム描画のものを使用し、「layoutIfNeeded」を呼び出す必要はありませんでした...

「drawRect」は問題なく、問題はありませんか? 「setNeedsLayout」を呼び出す前に、そのデータの準備ができていない可能性があります。

次のスレッドへの最初の回答は、さらに役立つ可能性があります。

于 2012-06-29T17:31:45.397 に答える
-1

UIKit にそのような明白なバグがあるとは思いません。あなたなら、自分のコードがオーバーライドしたすべての基本メソッドを呼び出すかどうかを確認します。特に、問題のあるオブジェクトの階層の親で。これで問題が解決しない場合は、カスタムの親ビューをいくつかの標準ビューに置き換えて、問題が解決しないかどうかを確認します。これは、問題を特定するのに役立ちます。

于 2012-07-02T11:42:09.097 に答える