[解決済み] UIViewのsetNeedsLayout、layoutIfNeeded、layoutSubviewsの関係は?
質問
の関係について、どなたか明確な説明をお願いします。
UIView's
setNeedsLayout
,
layoutIfNeeded
と
layoutSubviews
メソッドを使用できますか?また、この3つのメソッドが使用される実装例についても教えてください。ありがとうございます。
何が私を混乱させるかというと、カスタムビューに
setNeedsLayout
メッセージを送ると、このメソッドの次に呼び出されるのが
layoutSubviews
を飛び越え
layoutIfNeeded
. ドキュメントを見る限りでは、次のような流れになると思われます。
setNeedsLayout
原因
layoutIfNeeded
が呼び出されるようにする > 原因
layoutSubviews
が呼び出されるようにする。
どのように解決するのですか?
私はまだこれを自分自身で理解しようとしているので、いくつかの懐疑的な態度でこれを取り、それがエラーを含んでいる場合、私を許してください。
setNeedsLayout
は簡単なものです。UIView のどこかに、レイアウトが必要であるとマークするフラグを設定するだけです。 それは強制的に
layoutSubviews
が呼び出されるようになります。 多くの場合、これを明示的に呼び出す必要はないことに注意してください。
autoresizesSubviews
プロパティのためです。 それが設定されている場合(デフォルトではそうなっています)、ビューのフレームへの変更は、ビューがそのサブビューをレイアウトすることを引き起こします。
layoutSubviews
は、すべての興味深いことを行うメソッドです。 これは
drawRect
と同じです。 些細な例ですが、次のようになります。
-(void)layoutSubviews {
// Child's frame is always equal to our bounds inset by 8px
self.subview1.frame = CGRectInset(self.bounds, 8.0, 8.0);
// It seems likely that this is incorrect:
// [self.subview1 layoutSubviews];
// ... and this is correct:
[self.subview1 setNeedsLayout];
// but I don't claim to know definitively.
}
参考までに
layoutIfNeeded
は一般にサブクラスでオーバーライドされることを意図していません。 これは、ビューをレイアウトするときに呼び出されるメソッドです。
今すぐ
. Appleの実装はこのような感じでしょうか。
-(void)layoutIfNeeded {
if (self._needsLayout) {
UIView *sv = self.superview;
if (sv._needsLayout) {
[sv layoutIfNeeded];
} else {
[self layoutSubviews];
}
}
}
あなたは
layoutIfNeeded
を呼び、そのビュー (および必要に応じてそのスーパービュー) を直ちにレイアウトするように強制します。
関連
-
[解決済み] Cocoa:フレームとバウンドはどう違うの?
-
[解決済み] Mobile Safariで電話番号のリンクを無効にする方法を教えてください。
-
[解決済み】Cocoa Touch:UIViewのボーダーの色と太さを変更する方法は?
-
[解決済み] UIViewのフレーム、バウンズ、センター、オリジン、いつ何を使うか?
-
[解決済み] UIPageControlのページネーションドットの色を変更するにはどうしたらよいですか?
-
[解決済み] xcodeでiOSアプリのアーカイブを生成できない
-
[解決済み] iosアプリの最大メモリ使用量
-
[解決済み] インスタンスからクラス名を取得する
-
[解決済み] iPhone SDK: loadViewとviewDidLoadの違いは何ですか?
-
[解決済み] インターフェースビルダー UIViewのレイアウト iOS 6/7のデルタは何のためにあるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] hw.machine」識別子の信頼性を確認する方法は?
-
[解決済み】@try - Objective-Cのcatchブロック
-
[解決済み] UIPageControlのページネーションドットの色を変更するにはどうしたらよいですか?
-
[解決済み] CGFloatとfloatを使うことの違いは何ですか?
-
[解決済み] UITableViewHeaderFooterView。背景色を変更できない
-
[解決済み] インスタンスからクラス名を取得する
-
[解決済み] 再署名 IPA (iPhone)
-
[解決済み] Objective-C用JSONパーサーの比較(JSON Framework、YAJL、TouchJSON、etc.)
-
[解決済み] オプションのメソッドを持つプロトコルを作成するには?
-
[解決済み] 円形のカスタムUIViewの描き方 - iPhoneアプリ