-4

viewDidLoadUIViewControllerのメソッド内:

NSLog(@"frame: %f %f", self.view.frame.size.width, self.view.frame.size.height);

デバイスを横向きにすると:

frame: 748.000000 1024.000000

デバイスを縦向きにした場合:

frame: 768.000000 1004.000000
4

5 に答える 5

13

ではviewDidLoad、フレームは、回転、ステータス バーの高さの変更、その他のビューなど、最終的なサイズに影響を与えるすべてのものに調整されていない可能性があります。通常、ここではオブジェクトの作成と設定のみを行うことをお勧めします。でファイナライズされたフレームを調べることができますviewWillLayoutSubviews

于 2013-05-07T14:09:33.233 に答える
5

ビューコントローラーのサイズはありません。ビューまたはウィンドウのサイズです。.frameor.boundsメソッドを使用して取得できます。また、次を使用してrectを簡単に印刷できます。

NSLog("Frame: %@", NSStringFromCGRect(self.view.frame));
NSLog("Frame: %@", NSStringFromCGRect(self.view.window.frame));

[UIScreen mainScreen].boundsを使用して、全画面のサイズを取得することもできます。向きに応じて、ステータス バーの x または y 方向に 20 ピクセルのオフセットが常に得られます。

何が起こっても、デバイスが縦向きモードでホーム ボタンが押されていると仮定すると、フレームは高さと幅を返します。そのため、デバイスが横向きモードの場合、ステータス バーは右側にあり、ステータス バー用のスペースを確保するために幅が 20 ピクセル小さくなっています。

編集: iOS 8 以降縦向きと横向きで幅と高さを正しく取得できるようになりました。つまり、見た目は -- 横幅 = 縦長の高さです。コードで使用すると、

CGRect frame = [[UIScreen mainScreen] applicationFrame];
    CGSize size = frame.size;
    if (![UIUtil isAfterIOS8]){
        size.width = frame.size.height;
        size.height = frame.size.width;
    }

/* UIUtil.m */ 
+ (BOOL) isAfterIOS8 {
    return [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0;
}
于 2013-05-07T14:09:18.267 に答える
3

self.view.bounds代わりに使用する必要があります。

于 2013-05-07T14:10:05.783 に答える
0

これは、View Controller のメイン ビューの現在のサイズです。ビューはポイント単位で測定されます。

ポイント単位の iPad 画面のサイズは 1024x768 ですが、NSLog で得られるサイズは上部にステータス バーがなく、高さが 20 ポイントであることに注意してください。

于 2013-05-07T14:10:34.973 に答える