web-dev-qa-db-ja.com

iPhone / iPad:プログラムで画面幅を取得する方法は?

こんにちは、プログラムで幅を取得する方法があるかどうか疑問に思っています。

Iphone 3gs、iphone 4、ipadに対応するのに十分な一般的なものを探しています。また、幅はデバイスが縦向きか横向きか(iPadの場合)に基づいて変更する必要があります。

誰もこれを行う方法を知っていますか?私はしばらく探していました...ありがとう!

79
foreyez

IScreen を見てください。

例えば。

CGFloat width = [UIScreen mainScreen].bounds.size.width;

ステータスバーを含めたくない場合(幅に影響しない場合)は、applicationFrameプロパティを確認してください。

UPDATE:UIScreen(-boundsまたは-applicationFrame)は現在のインターフェースの向きを考慮しないことがわかります。より正確なアプローチは、UIViewにその境界を問い合わせることです。このUIViewは、View Controllerによって自動回転されていると想定しています。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    CGFloat width = CGRectGetWidth(self.view.bounds);
}

ビューがView Controllerによって自動回転されていない場合は、インターフェイスの向きを確認して、ビューの境界のどの部分が「幅」と「高さ」を表すかを判断する必要があります。 frameプロパティは、UIWindowの座標空間でビューの四角形を提供することに注意してください。デフォルトでは、インターフェイスの向きは考慮されません。

198
Alan Rogers
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);
11
thyrgle

これは行のコードで実行できます。

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];
6
memmons

IOS 9.0では、方向を確実に取得する方法はありません。これは、ポートレートモード専用に設計したアプリに使用したコードです。そのため、アプリをランドスケープモードで開いた場合でも、正確になります。

screenHeight = [[UIScreen mainScreen] bounds].size.height;
screenWidth = [[UIScreen mainScreen] bounds].size.width;
if (screenWidth > screenHeight) {
    float tempHeight = screenWidth;
    screenWidth = screenHeight;
    screenHeight = tempHeight;
}
0
Bobby

つかいます:

NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
0
Nick

このコードを使用してください

[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width
0