2

のサブクラスを作成し、それをUIViewと呼びましたMSMobileControlViewUIViewAutolayout 対応のストーリーボードにオブジェクトを追加し、そのクラスを に割り当てましたMSMobileControlView

内部MSMobileControlViewには次のコードがあります。

-(void)didMoveToSuperview
{
    NSLog(@"self.frame: %@", NSStringFromCGRect(self.frame));

    UIBUtton *levelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [levelButton setFrame:CGRectMake(0, 0, 150, 40)];
    [levelButton setTitle:@"Next Level" forState:UIControlStateNormal];
    [self addSubview:levelButton];
}

NSLog出力は次のとおりです。

self.frame: {{0, 0}, {0, 0}}

ただし、画面にはまだビューが表示され、ボタンは期待どおりにタップに反応します。に関連付けられている他のコードはありませんMSMobileControlView。何が起こっている?

4

1 に答える 1

1

自動レイアウト ランタイムは後でフレームに値を割り当てます。それらの割り当てられた値を見たい場合は、あなたを入れてNSLogくださいviewDidLayoutSubviews

Auto Layout を使い始めるときに 1 つアドバイスするとしたら、それはフレームを忘れることです。制約を操作するだけです。Auto Layout でフレームを操作して、制約が指定するレイアウトを提供します。

于 2013-08-09T10:07:19.940 に答える