使用宏检测iPhone6和iPhone6 Plus

lee*_*ona 6 iphone macros device ios ios8

我试图检测当前的设备是iPhone5,iPhone6还是iPhone 6 Plus.

在我的应用程序中,我已经使用这个宏来检测完美的iPhone 5.

#define IS_IPHONE_5      (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
Run Code Online (Sandbox Code Playgroud)

同样,我使用此宏来检测iPhone 6和iPhone 6 Plus.

#define IS_IPHONE_6      (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON)
#define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON)
Run Code Online (Sandbox Code Playgroud)

IS_IPHONE_5宏以任何方向按预期工作.

我的问题是当设备保存在LANDSCAPE中时,IS_IPHONE_6和IS_IPHONE_6_PLUS宏不会返回true.但是,当设备在PORTRAIT中保存时,它们确实可以正常工作.是什么赋予了?

如果有人有更好的建议来检测iPhone5,6和6 Plus请分享.

hfo*_*sli 8

这是针对iOS系统版本和SDK版本的任何组合进行测试和设计的

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
Run Code Online (Sandbox Code Playgroud)

注意:如果iPhone 6处于缩放模式,则UI是iPhone 5的放大版本.这反映在宏中.

用法:http://pastie.org/9687735


Bas*_*Bas 1

看看这个答案:iOS - How to get device make and model? 它不使用宏,但它可以完成工作。我见过一些类似的宏检测 iPhone 6 和 iPhone 6 plus 的问题。所以最好尝试一下@Ohhmee 的答案

编辑:当然可能有一个用宏检测它的解决方案。但我不知道这一点,也找不到解决方案,所以我建议采用不同的方法。

  • 这并不能回答问题,并且检查设备型号很少是合适的解决方案。 (2认同)