現在、Interface Builderを使用すると、ストーリーボード内のすべてのView Controllerのサイズを動的に変更して、特定のデバイスのサイズをシミュレートできます。
この機能の前に、ユーザーは各ビューコントローラのサイズを手動で設定する必要があります。そのため、View Controllerは特定のサイズで保存initWithCoder
され、初期フレームの設定に使用されました。
今、initWithCoder
ストーリーボードで定義されたサイズを使用せず、ビューコントローラービューとそのすべてのサブビューに1000x1000 pxのサイズを定義しているようです。
ビューは常にこれらのレイアウトソリューションのいずれかを使用する必要があるため、これは問題ではありません。
ただし、自動レイアウトと自動サイズ変更マスクのどちらもレイヤープロパティに適用されないため、これは、ビューレイヤーに関連するすべてのレイアウトスタッフにとって問題になります。cornerRadius
この問題に答えるための一般的な方法はviewDidLayoutSubviews
、コントローラー内にいるlayoutSubview
場合、またはビュー内にある場合に使用することです。この時点で(それらのsuper
相対メソッドを呼び出すことを忘れないでください)、すべてのレイアウト関連の処理が完了したことはほぼ確実です!
かなり確かですか?うーん...完全にではありませんが、私が述べたので、私はこの質問をしました。いくつかのケースでは、このメソッドではビューのサイズが1000x1000のままです。私自身の質問に対する答えはないと思います。それに関する最大の情報を与えるために:
1-セルをレイアウトするときにのみ発生します!ではUITableViewCell
&UICollectionViewCell
サブクラス、layoutSubview
呼び出されません後にサブビューを正しくにレイアウトされるだろう。
2- @EugenDimboiuが述べたように(役立つ場合は、彼の回答に投票してください)、[myView layoutIfNeeded]
レイアウトされていないサブビューを呼び出すと、適切なタイミングで正しくレイアウトされます。
- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel); // 1000x1000 size
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel); // normal size
}
3-私の意見では、これは間違いなくバグです。レーダーに送信しました(id 28562874)。
PS:私は英語が母国語ではないので、文法を訂正する必要がある場合は、投稿を自由に編集してください;)
PS2:より良い解決策がある場合は、別の答えを書かないでください。受け入れた回答を移動します。