6

自動レイアウトを使用してIOS6でアプリを書き直していますが、UIViewのサブクラスのサイズにアクセスできません。

@property (weak, nonatomic) IBOutlet MyView *myView1;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSLog(@"myView1: %@",self.myView1);
}

UIViewのサイズはStoryBoardで完全に定義されていますが、コードを実行するとゼロになります。これは自動レイアウトで行うことですか、それともサブビューがまだ定義されていないだけですか?私はここで基本的に何か間違ったことをしていますか?

4

2 に答える 2

11

ここで考えられる答えが1つ見つかりました。メソッドの実行

[self.view setNeedsLayout];
[self.view layoutIfNeeded];

UIViewsディメンションの計算を強制して、期待値をログに表示し、UIViewサブクラス自体にも認識させます。

于 2013-01-03T22:58:57.567 に答える
0

サブビューのフレームを印刷しました。

でし0viewDidLoad

コールバック内にゼロ以外の値がありましたviewDidLayoutSubviews

内部では、ビューコントローラの値がゼロ以外であるviewDidLoadことだけを期待する必要があります。view内部viewDidLoadには、実際にはサブビューなどを追加することがあります。したがって、フレームの設定制約であるコールバックでフレームが計算されることを期待するのは正しくありません。

基本的に理解する必要があるのは、最初にviewControllerが描画され、次にライフサイクルイベントを通過するときにサブビューがレイアウトされることです。

于 2020-08-24T19:32:24.890 に答える