layoutSubview
アニメーション中にメッセージを受信しないカスタム ビューがあります。
画面いっぱいに表示されるビューがあります。画面の下部にカスタム サブビューがあり、ナビゲーション バーの高さを変更すると、Interface Builder で正しくサイズ変更されます。layoutSubviews
ビューの作成時に が呼び出されますが、それ以降は呼び出されません。サブビューは正しくレイアウトされています。呼び出し中のステータス バーをオフにすると、メインlayoutSubviews
ビューがサイズ変更をアニメーション化しているにもかかわらず、サブビューはまったく呼び出されません。
実際にどのような状況でlayoutSubviews
呼び出されるのでしょうか?
カスタム ビューにautoresizesSubviews
設定しました。また、Interface Builder では、上部と下部の支柱と垂直矢印を設定しました。NO
パズルのもう 1 つの部分は、ウィンドウをキーにする必要があることです。
[window makeKeyAndVisible];
それ以外の場合、サブビューは自動的にサイズ変更されません。
ベストアンサー1
私も同じような質問がありましたが、その答え(またはネット上で見つけた答え)に満足できなかったので、実際に試してみたところ、次のような結果が得られました。
init
layoutSubviews
呼び出されることはありません(当たり前ですが)addSubview:
layoutSubviews
追加されるビュー、追加先のビュー(ターゲットビュー)、およびターゲットのすべてのサブビューで呼び出されます。- ビューは、フレームのサイズパラメータが異なる場合にのみ、フレームが設定されているビューを
setFrame
インテリジェントに呼び出します。layoutSubviews
- UIScrollViewをスクロールすると、
layoutSubviews
scrollViewとそのスーパービューでが呼び出されます。 - デバイスを回転すると、
layoutSubview
親ビュー(応答するviewControllersプライマリビュー)のみが呼び出されます。 - ビューのサイズを変更すると、
layoutSubviews
そのスーパービューが呼び出されます (重要: 固有のコンテンツ サイズを持つビューは、サイズを決定するコンテンツが変更されるとサイズが変更されます。たとえば、UILabel のテキストを更新すると、固有のコンテンツ サイズが更新され、layoutSubviews
スーパービューが呼び出されます)
私の結果 -http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/