4

私には見解があります。これは、大規模で複雑なプロジェクトの一部です。ビューのフレームが設定されている場合、layoutSubviews は自動的に呼び出されません。

これをいじって、次のメソッドをビューに入れてみました:

-(void) setFrame: (CGRect) frame {
    NSLog (@"setting frame");
    [super setFrame: frame];
    [self setNeedsLayout];
}

この時点で、期待どおり、フレームが設定されたときにレイアウトがやり直されました。そして、setNeedsLayout の行をコメントアウトすると、レイアウトが行われませんでした。さらに、スーパーが呼び出されている行で「ステップイン」をクリックしても、デバッガーは何もステップインしません。私が知る限り、スーパーの setFrame メソッドはオーバーライドされていません。

FWIW、ビューのフレームを変更する小さなテスト プロジェクトも行いました。この場合、それを行ったときに layoutSubviews が呼び出されました。[私のテスト プロジェクトでは setNeedsLayout が呼び出されませんでした。しかし、それが何かはわかりません。

誰が何が起こっているのか説明できますか?

編集:明確にするために、私のフレームの変更はビューの高さを変更しています。幅は変更されません。

4

0 に答える 0