web-dev-qa-db-ja.com

UIScreen MainScreen Boundsが間違ったサイズを返す

そこで、最新バージョンのXCodeを使用して新しいプロジェクトを作成し、アプリの画面サイズをログに記録しようとしました(UIのデバイスタイプを決定するため)。 iPhone 5から次のコードを実行しました。

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

これにより、480が返されました。これは、古いiPhoneファミリの画面サイズです。シミュレーターで試したところ、同じことが起こりました。画面サイズを認識するためにプロジェクトで有効にする必要があるプロパティはありますか?

これは、5台以上のデバイスでのみ発生します。 iPadでゲームを実行すると、1024画面サイズが認識されます。

このコードは過去に機能していたという事実を知っています。まったく同じ方法を使用してしばらく前にゲームを作成しましたが、画面サイズの検出に問題はありませんでしたが、これはXCode 4.xで構築されました。

追加情報:

私はカスタムView Controllerを使用しています。これは、App Delegateで次のコードを使用して作成します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    if([Global getDevice] == 1)
    {
        //iPhone 5+
        self.window.rootViewController = [[FivePlus alloc] initWithNibName:nil bundle:nil];

    }
    else if([Global getDevice] == 2)
    {
        //iPhone 4S-
        self.window.rootViewController = [[FourSMinus alloc] initWithNibName:nil bundle:nil];
    }
    else
    {
        //iPad
        self.window.rootViewController = [[iPad alloc] initWithNibName:nil bundle:nil];
    }

    [[self window] makeKeyAndVisible];

    // Override point for customization after application launch.
    return YES;
}

Global.hのgetDeviceメソッド:

+ (int)getDevice
{
if([[UIScreen mainScreen] bounds].size.height == 568 || [[UIScreen mainScreen] bounds].size.width == 568)
    {
        return 1;
    }
    else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        return 3;
    }
    else
    {
        return 2;
    }
}
40
David

どうやら、iOSはsolelyをアプリがその解像度で実行できるようにするために、iPhone 5+の解像度での起動画像の存在に依存しています。

この問題には2つの解決策があります。

1。資産カタログを使用

新しいプロジェクトを作成するとき、起動イメージファイルを保存するアセットカタログと呼ばれるものがあります。これらのいずれかをプロジェクトに追加してください!

2。古いファイルを掘り下げる

XCodeをしばらく使用している場合、XCode 4.xの以降のバージョンのいずれかで、アプリはDefault.png[email protected]、および[email protected]という3つのデフォルト起動イメージファイルを自動的に作成したことがわかります。アプリにはこれらのファイルが必要です。これらのファイルは、本質的にそれぞれ480x320960x6401136x640の解像度を持つ単なる黒い画像です(これらはWxHではなくHxWにあることに注意してください)。

  1. これらのファイルを「サポートファイル」グループに追加します
  2. プロジェクトプロパティに移動し、[画像の起動]セクションから[アセットカタログを使用しない]を選択します
  3. 資産カタログを削除します。

うまくいけば、これがこのばかげた問題に遭遇した他の誰かを助けます。

102
David

多くの場合、iOSは画面サイズを「ふり」します。 Appleは、たとえば、ある解像度で適切な起動イメージがない場合、その解像度でアプリが適切に動作するように設計されていないため、極端な場合、iPad上で実行されているiPhone専用アプリは320 x 480を返します。

アプリケーションに関する限り、報告される画面サイズは、アプリケーションで使用可能な画面サイズです。 320 x 480と報告された場合は、アプリケーションで使用できます。 480ピクセル未満で描画されたものは表示されません。

たとえば、適切なサイズの起動画像を提供することで、iOSに必要な解像度でアプリを実行するように説得します。 iPhone 6および6+の場合、ユーザーは「ズーム」モードでそれらを実行できるため、iPhone 5または6(物理的に大きい)の画面があるかのように動作します。

2
gnasher729

XCode6では、iPhone5の画面サイズのスプラッシュ画面イメージがないため、警告がトリガーされます。警告を押した場合、XCodeはデフォルトのもの(単なる黒)を追加します。

これにより、「通常の」シミュレータサイズが有効になります。

1
Jasper

IOS 8の場合[[UIScreen mainScreen] bounds].size.height);デバイスが垂直モードまたはランドスケープモードにあるかどうかを反転したものを返します。

1
Nicolas Manzini