因此,我使用最新版本的XCode创建了一个新项目,并尝试记录我的应用程序的屏幕大小(以确定UI的设备类型)。我从iPhone 5运行了以下代码:
NSLog(@"%f", [[UIScreen mainScreen] bounds].size.height);
这返回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;
}
+ (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;
}
}
答案 0 :(得分:102)
显然,iOS依赖完全来解决iPhone 5+的分辨率,以便让应用以该分辨率运行。
这个问题有两种解决方案:
<强> 1。使用资产目录
当您创建一个新项目时,会有一个名为资产目录的东西,它存储您的启动图像文件。将其中一个添加到您的项目和presto!
<强> 2。挖出一些旧文件
如果你已经在XCode上呆了一段时间,你就会知道在XCode 4.x的更高版本之一中,该应用会自动为你的应用创建三个默认的启动图像文件Default.png
, Default@2x.png
和Default-568h@2x.png
。您需要在应用中使用这些文件,这些文件基本上只是分别为480x320
,960x640
和1136x640
的黑色图片(请注意,这些是HxW,而不是WxH)。 / p>
希望这可以帮助遇到这个荒谬问题的其他人。
答案 1 :(得分:2)
iOS通常会“假装”您拥有的屏幕尺寸。例如Apple假设如果您没有正确的启动图像以获得某种分辨率,那么您没有将应用程序设计为在该分辨率下正常工作,因此它将以不同的大小运行您的应用程序。在极端情况下,在iPad上运行的仅限iPhone的应用程序将返回320 x 480.
就您的应用而言,报告的屏幕大小是您的应用程序可用的屏幕大小。如果它报告320 x 480,那么这就是您的应用程序可以使用的。在480像素以下绘制的任何内容都不可见。
您可以通过提供正确尺寸的启动图像来说服iOS以您想要的分辨率运行您的应用。对于iPhone 6和6+,用户可以在“缩放”模式下运行它们,因此它们的行为就像是拥有iPhone 5或6的屏幕(只是物理上更大)。
答案 2 :(得分:1)
在没有闪屏画面的XCode6中,iPhone5的屏幕尺寸会触发警告。如果按下警告,XCode将添加默认值(仅为纯黑色)。
这将使正常&#39;模拟器大小。
答案 3 :(得分:1)
在iOS 8 [[UIScreen mainScreen] bounds].size.height);
中,无论设备处于垂直模式还是横向模式,都会返回反转的内容。
答案 4 :(得分:1)
打开一个旧项目时,我遇到了这个问题。
因此,我找到了解决方案。就我而言,问题是我没有LaunchScreen
文件和info.plist
文件中与此有关的信息。
在<dict>
和</dict>
之间添加这两行
UILaunchStoryboardName LaunchScreen
info.plist文件的正文,如果需要的话:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
我希望,这会有所帮助!
答案 5 :(得分:0)
这仍然取决于2014年发布的答案中所述的启动图像。
自从发布答案以来,Apple已发布了许多具有不同屏幕分辨率的产品,因此该答案中的解决方案#2不再适用于所有设备。
从XCode 10.3开始,执行此操作的方法是在项目中创建启动映像资产目录,然后在其中填充映像。具体来说,所有可能的选项都有27个不同大小的启动图像。
我为正在从事的项目制作了全套照片,这些照片都发布在github上,以便您可以节省自己制作所有这些图像的乐趣。