私には見解があります。これは、大規模で複雑なプロジェクトの一部です。ビューのフレームが設定されている場合、layoutSubviews は自動的に呼び出されません。
これをいじって、次のメソッドをビューに入れてみました:
-(void) setFrame: (CGRect) frame {
NSLog (@"setting frame");
[super setFrame: frame];
[self setNeedsLayout];
}
この時点で、期待どおり、フレームが設定されたときにレイアウトがやり直されました。そして、setNeedsLayout の行をコメントアウトすると、レイアウトが行われませんでした。さらに、スーパーが呼び出されている行で「ステップイン」をクリックしても、デバッガーは何もステップインしません。私が知る限り、スーパーの setFrame メソッドはオーバーライドされていません。
FWIW、ビューのフレームを変更する小さなテスト プロジェクトも行いました。この場合、それを行ったときに layoutSubviews が呼び出されました。[私のテスト プロジェクトでは setNeedsLayout が呼び出されませんでした。しかし、それが何かはわかりません。
誰が何が起こっているのか説明できますか?
編集:明確にするために、私のフレームの変更はビューの高さを変更しています。幅は変更されません。