私は新しい開発者iOSです。
自動レイアウトを使用します。
私は問題があります。制約の後、UIViewの実際のサイズを取得できません。
例、制約付きでUIView
のサイズを取得する場合
self.container.frame.size.height
すべてのデバイスサイズで常に550を返します。しかし、異なるデバイスで実行すると、サイズが異なることがわかります。
ありがとう
最も簡単な解決策は、-viewDidAppear:
でそのコードを実行することです(自動レイアウトの実行後)。
「実際のサイズのコードを取得する」前に、次のコードを挿入します。
[view setNeedsLayout];
[view layoutIfNeeded];
誰もがUIViewController
サブクラス内ではなくUIView
を介してアクセスが行われると想定しているため、答えは実際には有用ではありません。 UIView
サブクラスの正しいサイズを取得する正しい方法は、layoutSubviews
にあります。
UIView
メソッドintrinsicContentSize
を使用できます
これについて読むことができます https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//Apple_ref/occ/instm/UIView/intrinsicContentSize
これはすごい。
自動レイアウトの使用中にlayoutsubviewsメソッドを使用せずにフレームを取得する場合は、次のいずれかを使用します。
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
})
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;
があなたが探しているもののようです:
戻り値
保持している制約を満たすビューのサイズ。討論
保持するすべての制約とそのサブビューの制約を考慮して、ビューの最適なサイズを決定します。
[view layoutIfNeed]を保存してください。
このメソッドを使用して、描画前にサブビューのレイアウトを強制します。このメソッドは、メッセージをルートビューとして受信するビューを使用して、ルートから始まるビューサブツリーをレイアウトします。
このメソッドを呼び出した後、xibでカスタムビューの実際のサイズを取得できます。 @Allenと著者に感謝します。
viewDidLayoutSubviews
の前に発生するため、最良の瞬間はviewDidAppear
の間にあります。したがって、ビューが表示される前にいくつかの変更を行うことができます。