51

私はiPadアプリケーションを持っています。横向きUIViewControllerのビューの実際の幅 =1024pxおよび高さ = 768 - 20 (statusBar) - 44 (navigationBar) = 704px.

なので、この[1024 x 704]サイズが欲しくて使っself.view.boundsています。が返されますが[748 x 1024]、これは間違っています! しかし、画面を 2 回回転すると (現在 -> 縦 -> 現在)、ビューの境界は正しい[1024 x 704]です。

ビューは次のように初期化されました。

- (void)loadView {
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    self.view.backgroundColor = [UIColor lightGrayColor];
}

そして境界は次のようになりました:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"bounds = %@", NSStringFromCGRect(self.view.bounds));
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    NSLog(@"bounds = %@", NSStringFromCGRect(self.view.bounds));
}

問題は..最初に正しいビューの境界を取得するにはどうすればよいですか?

4

6 に答える 6

47
于 2017-02-16T13:40:00.860 に答える
34

他のいくつかの回答によると、あなたが見ている問題は、ローテーションが発生する前viewDidLoadに呼び出されるためです。iPad は常に縦向きモードで初期化されるため、 でサイズの値を取得すると、設定した向きに関係なく、常に縦向きサイズになります。 viewDidLoad

向き/回転が発生したにサイズを取得するには、 でサイズ値を取得しますviewDidAppear


iOS がこれをより適切に処理しない理由を特に理解していません。特に、プロジェクト設定と Xcode Interface Builder で向きを定義している場合は特にそうです。でも、ちゃんとした理由があると思います;-)。

于 2013-09-05T05:50:35.593 に答える
16

私はいつも使ってきました:

CGSize sizeOfScreen = [[UIScreen mainScreen] bounds].size;

画面のサイズを取得するには、次のようにします。

CGSize sizeOfView = self.view.bounds.size;

viewのサイズを取得します。viewDidLoad でテストしたところ、次のように返されました。

2012-07-17 10:25:46.562 Project[3904:15203] bounds = {768, 1004}

CGSize は {Width, Height} として定義されているため、これは正しいです。

于 2012-07-17T13:19:50.540 に答える
2

これは私の最後のプロジェクトで見つけたものです:この画面にナビゲーションバーなどがあるかどうかに応じて、viewDidLoadの後にself.viewのフレームが調整されます.

そのため、viewDidLoad の後で (おそらく viewWillAppear または viewDidAppear で) その値を使用するか、バーの高さを差し引いて手動で調整することをお勧めします。

于 2012-07-17T12:59:17.540 に答える
2

私はこの問題に遭遇し、境界を取得することがviewDidAppear私のニーズに合っていることがわかりました。

于 2012-09-06T20:31:57.557 に答える