3

どうやら私は何かを誤解している可能性があるようです。全画面表示で、ステータス バーなどのない iPad アプリがあります。また、常に横向きモードなので、縦向きを気にする必要はありません。正しいフレームを使用してプログラムでビューを作成していますが、ビューが実際に読み込まれて表示されると、フレームが異なるようです。

ビューを生成するために使用するコードは次のとおりです(以下のビューにさらに追加しますが、それらは私の問題とは関係ありません):

- (void)loadView{
    self.view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 1024.0, 768.0)];

    backgroundImage = [[UIImageView alloc] initWithFrame:self.view.bounds];
    [backgroundImage setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
    [self.view addSubview:backgroundImage];
}

ビューに表示されたので、self.view のフレームを NSLog して get し{{-128, -128}, {1024, 768}}ます。サイズは合っていますが、原点が変わっています。何が起こるかを確認するために、128, 128 の原点でビューを初期化しようとしました。これにより{{0, -256}, {1024, 768}}、説明できないフレームが生成されました。

一体何が起こっているのか誰か教えてもらえますか? 自動サイズ変更マスクなどを設定して遊んでみましたが、実際には何も変わりませんでした。私は少し立ち往生しています。

4

1 に答える 1

2

すべてのUIViews' 正しいジオメトリは、メソッド内およびメソッドの後にのみ使用できますviewWillAppear:。それ以前は、ビュー階層のジオメトリが設定されておらず、値が不正確です。フレームを知り、変更し、計算する必要がある場合は、viewWillAppear:メソッドの前にそれを行うべきではありません。
更新:で初期化するメソッドを
オーバーライドします。nib ファイルを使用している場合、これは自動的に行われるため、このメソッドをオーバーライドしないでください。この方法では、リアル ビュー ジオメトリは使用できません。ビュー階層が設定されている場所です。これは通常、サブビューを初期化し、それらを-loadViewself.viewUIView
-viewDidLoadself.view. マルチスレッドを必要としない限り、より重い操作を実行できます。ビュー ジオメトリもこの方法では使用できません。マスクの自動サイズ変更はここでは効果がなく、frameプロパティを当てにすることはできません。
-viewWillAppear:は、すべてが正しくセットアップされ、ビューのサイズが変更される場所です。追加のジオメトリを計算して設定する場合は、このメソッドを使用してくださいframe。プロパティは正しいです。このメソッドはメイン スレッドをブロックせず、できるだけ高速に実行する必要があるため、ここでは軽量の操作のみを実行してください。
同じですviewDidAppear:

于 2012-06-08T19:19:41.977 に答える