時にはlayoutSubviewsす。
-
05-09-2019 - |
質問
いカスタムビューが少なくなってきている layoutSubview
メッセージ中のアニメーション
私はこのところの埋の画面になります。このカスタムsubview下の画面が正しいサイズのインターフェイスをビルダーを変更した場合、購入したの高さnavバーがあります。 layoutSubviews
された際に呼び出されるビューを作成しません。私subviewsが正しく登録されてい願いすることがあります。ま切り替えのコステータスバーのsubviewの layoutSubviews
呼び出されることはありませんので、でも、メインビューはアニメーションがそのサイズ変更.
はどのような場合 layoutSubviews
って呼ぶの?
していま autoresizesSubviews
設定 NO
自分のカスタムビュー。とのインターフェイスをビルダーの上下支柱や垂直矢印のセットです。
他のパズルのようなものである窓のなければなキー:
[window makeKeyAndVisible];
の他のsubviewsは自動的にリサイズされます。-
解決 5
私はばねがシミュレートされた画面要素は、(ステータスバーなど)になっているビューに変更することができないことインタフェースビルダーの主張まで溶液を追跡しました。バネがメインビューのオフだったので、そのビューは、インコールバーが表示された際にその全体をスクロールダウンし、従ってサイズを変更しませんでした。
ビューのサイズを変更すると、正しくスプリングを設定し、その後、シミュレートされた機能をオフにすると、アニメーションが発生する原因と私の方法が呼び出される。
これをデバッグするに余分な問題は、通話中の状態はメニューから切り替えられたときに、シミュレータアプリを終了していることです。アプリ=なしデバッガを終了します。
他のヒント
また同様の質問ですが、なには満足して回答者かに純ったので実際、ここには何か:
init
しないlayoutSubviews
へ を呼び出す(duh)addSubview:
原因layoutSubviews
と呼ばれるように ビューに追加され、そのた 追加標示は、すべての subviewsの目標- 眺望
setFrame
ト電話layoutSubviews
月 の有するフレームセットのみ そうすれば、パラメータのフレーム 異なる - スクロールUIScrollView
原因
layoutSubviews
に対して呼び出される のscrollView、superview - 回転機器のみ通話
layoutSubview
の親ビューに 対応viewControllers主 ビュー) - リサイズの見通
layoutSubviews
そのsuperview
私の結果- http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/
ビルの前に答えるには以下のようにBadPirate、実験、さらなるビットおよび来の明確化/訂正に関するお知らせ"を参照。これらの layoutSubviews:
呼び出される事を示しば:
- 独自の 境界 (枠)に変更します。
- 境界のクレジットカードでのsubviewsを変更します。
- A subviewのビューは削除される方は受付にお申し出ください
その他にも関連する詳細:
- 境界と変更した場合にのみ、新たな価値が異なるため、 を含む異なる起源.注具体的にはその
layoutSubviews:
するときにUIScrollView巻などを行い、スクロールを変え、その境界'です。 - を変更するフレームのみの変更の範囲外の場合はサイズを変更し、このことを伝播の境界の物件です。
- 変化の範囲のビューについては、ビュー階層までの呼び出し
layoutSubviews:
時には最終的に追加され、ビュー階層. - 終わってしまうため完全性:これらのトリガをしない 直接 コlayoutSubviewsも
setNeedsLayout
, を設定する/上げます。繰り返し処理毎に実行ループは、ることができます。 は、ビュー階層, このフラグをチェックします。各ビューのフラグが見つかり、layoutSubviews:
呼び出したときに、このフラグがセットされます。景色以上に階層チェック/う。
<のhref = "https://developer.apple.com/library/prerelease/tvos/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5- SW1" のrel = "noreferrer"> https://developer.apple.com/library/prerelease/tvos/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html#//apple_ref/doc/uid/TP40009503-CH5- SW1する
次のいずれかのイベントが発生したときにレイアウトの変更が発生する可能性があります ビューでます:
A。ビューの境界矩形の大きさが変わる。
B。インターフェイスの向きの変更は、通常、ルートビューの境界矩形の変化をトリガする、発生します。
C。 Core Animationのサブ層のセットは、ビューのレイヤの変更に関連付けられているとレイアウトが必要です。
D。アプリケーション軍のレイアウトは、ビューのsetNeedsLayout
またはlayoutIfNeeded
メソッドを呼び出すことによって発生します。
電子。ビューの下地層オブジェクトのsetNeedsLayout
メソッドを呼び出すことにより、アプリケーションを強制的にレイアウトます。
一部のポイント BadPirateの回答 ているということになりますtrue:
のための
addSubView
点addSubview
原因layoutSubviewsに対して呼び出されるの追加、ビューが追加される(目標)は、すべてのsubviewsの目標です。によってビューの対象view)autoresizeマスクです。場合にはautoresizeマスク、layoutSubview呼ばれる各
addSubview
.存在しない場合autoresizeマスクをlayoutSubview呼び出される場合のみ、対象ビュー)フレームサイズ変わります。例:作成した場合UIViewプログラムではautoresizeマスクによるデフォルト)、LayoutSubviewする場合は呼び出されUIViewフレームに変更しない毎
addSubview
.この技術の性能の応用も増加します。
のためのデバイスの回転点
回転機器のみ通話layoutSubviewの親ビューに対応viewControllerの主要ビュー)
ことができた場合にだけtrueをおVCのVC階層構造のルートで
window.rootViewController
がる、ここが最も多い。IOS5の機能を利用した場合VCではないものを追加者別VC、このVCなければならないずっき装置の回転が行えます。そのため、眺望が得られない呼び出しlayoutSubviews.
を呼び出します
[self.view setNeedsLayout];
ViewControllerで、それはviewDidLayoutSubviews
あなたはlayoutIfNeeded見てきました!
ドキュメントスニペットは以下の通りです。あなたがアニメーション中に明示的にこのメソッドを呼び出した場合、アニメーションの仕事をしていますか?
layoutIfNeeded 必要に応じてサブビューを配置します。
- (void)layoutIfNeeded
ディスカッション 描画する前にサブビューのレイアウトを強制するために、このメソッドを使用します。
可用性 iPhone OS 2.0以降ます。
で利用可能、layoutSubviewsはもはや呼び出されませんでした。試行錯誤の多くの後、私は最終的に、MainWindow.xibを開いたWindowオブジェクトを選択し、インスペクタウィンドウのタブ(一番左)の属性と、「起動時に目に見える」にチェックを選びました。 SDK 3で、それはまだ4でlayoutSubViewsコールを引き起こすために使用されるが、ではないと思われます。
欲求不満の6時間は、最後に入れます。
layoutSubviews
が呼ばれることは決してありません、むしろ曖昧な、まだ潜在的に重要な場合は、次のとおりです。
import UIKit
class View: UIView {
override class var layerClass: AnyClass { return Layer.self }
class Layer: CALayer {
override func layoutSublayers() {
// if we don't call super.layoutSublayers()...
print(type(of: self), #function)
}
}
override func layoutSubviews() {
// ... this method never gets called by the OS!
print(type(of: self), #function)
}
}
let view = View(frame: CGRect(x: 0, y: 0, width: 100, height: 100))