UIScreen MainScreen Bounds返回错误的大小

Dav*_*vid 40 iphone objective-c frame ios uiscreen

因此,我使用最新版本的XCode创建了一个新项目,并尝试记录我的应用程序的屏幕大小(以确定UI的设备类型).我从iPhone 5运行了以下代码:

NSLog(@"%f", [[UIScreen mainScreen] bounds].size.height);
Run Code Online (Sandbox Code Playgroud)

这返回了480,这是旧iPhone系列的屏幕尺寸.我在模拟器中试过,发生了同样的事情.我必须在项目中启用一些属性来识别屏幕大小吗?

这仅适用于5个以上的设备; 如果我在iPad上运行游戏,它会识别1024屏幕尺寸.

我知道这个代码在过去有效.我使用完全相同的方法做了一段时间的游戏,它没有检测屏幕大小的问题,但这是在XCode 4.x中构建的.

附加信息:

我正在使用自定义视图控制器,我在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;
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 104

显然,iOS 完全依赖于iPhone 5+分辨率下的启动图像,以便让应用程序以该分辨率运行.

这个问题有两种解决方案:

1.使用资产目录

当您创建一个新项目时,会有一个称为资产目录的东西,它存储您的启动图像文件.将其中一个添加到您的项目和presto!

2.挖出一些旧文件

如果您见过世面的XCode了一段时间,你就会知道,在XCode中4.x版的后续版本中的一个,该应用程序会自动创建一个名为您的应用三个默认启动图像文件Default.png,Default@2x.pngDefault-568h@2x.png.你需要在你的应用这些文件,基本上只是黑色图像有关决议480x320,960x6401136x640,分别为(请注意,这些都是高x宽,不宽x高).

  1. 将这些文件添加到"支持文件"组
  2. 转到项目属性,然后从"启动映像"部分中选择"不使用资产目录"
  3. 删除资产目录.

希望这可以帮助遇到这个荒谬问题的其他人.

  • +1 +1 +1 +1 +1 +1 +1 +1你不知道这有多大帮助.多么奇怪的问题.哦,我的上帝.................... (12认同)
  • 这很荒谬. (7认同)
  • 这种软件特性是牛仔编码器所期望的,而不是Apple.我非常希望听到Apple的某个人解释为什么地球上的UIScreen课程应该依赖于发布图像? (5认同)
  • 这是苹果另一个令人难以置信的错! (2认同)