在模拟器上检测iPhone 6/Plus出现问题

14

我试图构建一个专门针对 iPhone 6 和 6 Plus 的应用程序版本,但我没有任何硬件可以使用。因此,我必须在模拟器上进行测试!但是似乎模拟器存在一个奇怪的 bug!首先,我通过以下代码获取屏幕分辨率和比例:

    UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
      NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

以下是检测 iPhone 6 和 6 Plus(肖像模式)的方法:

#define iPhone6 ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 667)

#define iPhone6Plus ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 736)

问题是!当我在iPhone 6 / Plus模拟器上启动我的应用程序时,编译器会给我iPhone 4“显示屏的屏幕信息:

    2014-09-28 12:32:08.153 WOD[2924:42290] 
Screen bounds: {{0, 0}, {320, 568}}, Screen resolution: <UIScreen: 0x7fa15be0f9b0; bounds = {{0, 0}, {320, 568}}; mode = <UIScreenMode: 0x7fa15bd0d4a0; 
size = 640.000000 x 1136.000000>>, scale: 2.000000, nativeScale: 2.000000

但是在新项目上它运行得很好!(我不能创建新项目并重新开始!)我 清理代码删除构建文件夹更改项目名称,并重置模拟器内容设置,但仍然给我4英寸显示器的信息!

我已经查看了这个Q/A,但答案需要一个真实的设备!


你是在 Xcode 5 中创建这个项目的,现在想用 Xcode 6 打开是吧? - Fahim Parkar
@FahimParkar 是的,我做了! - iOS.Lover
2
你尝试过添加启动屏幕吗?即使是MainStoryboard也可以。 - Phillip
为 iPhone 6 添加启动屏幕...这样你就可以得到合适的尺寸了... - Fahim Parkar
2
午餐屏幕? - El Tomato
谢谢大家,我为iPhone 6和6 Plus的高清视网膜屏幕添加了“LunchImage”,并添加了“LunchScreen”(但已删除),现在它可以很好地检测#define代码。 - iOS.Lover
2个回答

21

我遇到这个问题的主要原因是我使用Xcode 5构建了我的应用程序, 然后用Xcode 6打开它。

解决方案:

添加Retina HD 5.5和4.7的启动图像:

enter image description here

现在,即使没有真实设备,您也可以在模拟器上检测到iPhone 6 / Plus:

#define iPhone6 ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && MAX([UIScreen mainScreen].bounds.size.height,[UIScreen mainScreen].bounds.size.width) == 667)
 #define iPhone6Plus ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && MAX([UIScreen mainScreen].bounds.size.height,[UIScreen mainScreen].bounds.size.width) == 736)

兄弟,当 iPhone 5 推出时也发生了同样的事情...这是唯一的解决方案...但我忘记了 :D :) - Fahim Parkar
你需要使用正确尺寸的图片,或者你必须使用启动屏幕。https://dev59.com/Wl8e5IYBdhLWcg3wcJ8q - onmyway133

2

如果您需要检测iPhone 6/6 Plus横屏状态,请使用以下代码。

 #define iPhone6 ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && MAX([UIScreen mainScreen].bounds.size.height,[UIScreen mainScreen].bounds.size.width) == 667)
 #define iPhone6Plus ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && MAX([UIScreen mainScreen].bounds.size.height,[UIScreen mainScreen].bounds.size.width) == 736)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接