UIScreen主屏幕边界返回错误的大小

所以我用最新版本的XCode创build了一个新项目,并尝试logging我的应用程序的屏幕大小(以确定UI的设备types)。 我从iPhone 5运行以下代码:

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

这返回480 ,这是旧的iPhone家庭的屏幕大小。 我在模拟器中尝试过,发生同样的事情。 是否有一些属性,我必须在项目中启用它来识别屏幕大小?

这仅仅发生在5个以上的设备上。 如果我在iPad上运行游戏,它会识别1024屏幕大小。

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

附加信息:

我正在使用自定义视图控制器,我使用下面的代码在App Delegate中创build:

 - (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; } } 

显然,iOS 仅仅依靠在iPhone 5+的分辨率中出现的启动图像来让应用以该分辨率运行。

有两个解决这个问题的方法:

1.使用资产目录

当你创build一个新项目时,有一个叫做资产目录的东西存储你的启动镜像文件。 添加其中之一到您的项目和presto!

2.挖掘一些旧文件

如果你已经在XCode中呆了一段时间,你会知道在XCode 4.x的更高版本中,应用程序自动为你的应用程序创build了三个默认的启动映像文件,分别是Default.pngDefault@2x.png ,和Default-568h@2x.png 。 您需要在您的应用程序中使用这些文件,这些文件基本上只是分辨率为480×320,960×640和1136x640黑色图像(请注意,这些文件的格式为HxW,而不是WxH)。

  1. 将这些文件添加到您的“支持文件”组
  2. 转到项目属性,然后从“启动映像”部分select“不要使用资源目录”
  3. 删除资产目录。

希望这可以帮助别人谁遇到这个荒谬的问题。

在XCode6没有启animation面的情况下,iPhone5的屏幕尺寸会触发警告。 如果按下警告,XCode会添加一个默认的(只是普通的黑色)。

这将启用“正常”的模拟器大小。

在iOS 8 [[UIScreen mainScreen] bounds].size.height); 设备处于垂直或横向模式时返回一些倒置的东西。

iOS会经常“假装”你拥有的屏幕尺寸。 例如,苹果公司假设,如果您的某个解决scheme没有正确的启动映像,那么您还没有devise好应用程序以便在该分辨率下正常工作,因此它将以不同的大小运行您的应用程序。 在极端情况下,iPad上运行的仅iPhone应用程序将返回320 x 480。

就您的应用程序而言,报告的屏幕大小是您的应用程序可用的屏幕大小。 如果它报告320 x 480,那么这是你的应用程序可以使用的。 任何绘制在480像素以下的东西都将不可见。

您说服iOS以您想要的分辨率运行您的应用程序,例如通过提供适当大小的启动图像。 在iPhone 6和6+的情况下,用户可以在“缩放”模式下运行它们,以使其具有iPhone 5或6的屏幕(仅在物理上更大)。