【发布时间】:2014-11-26 16:19:24
【问题描述】:
我正在尝试检测当前设备是 iPhone5、iPhone6 还是 iPhone 6 Plus。
在我的应用中,我已经在使用这个宏来检测 iPhone 5,它运行良好。
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
同样,我使用这个宏来检测 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)
IS_IPHONE_5 宏在任何方向都能按预期工作。
我的问题是,当设备处于 LANDSCAPE 中时,IS_IPHONE_6 和 IS_IPHONE_6_PLUS 宏不会返回 true。然而,当设备保持在 PORTRAIT 中时,它们会按预期工作。什么给了?
另外,如果有人有更好的检测 iPhone5、6 和 6 Plus 的建议,请分享。
【问题讨论】:
-
你认为你为什么需要这样的宏?你用它们做什么?
-
在 iOS 8 下,当应用程序以横向启动时,您的宏都不起作用,因为在 iOS 8 下,屏幕大小实际上反映了应用程序的方向。在 iOS 7 和更早的版本中,屏幕尺寸从不反映实际的设备方向。
-
您是否在设备方向转换结束后使用宏?您的目标支持哪些设备方向?
-
@rmaddy 我需要这些,因为我的应用在旋转到横向时包含自定义表格视图。此表格视图被格式化为根据复杂的托管对象模式相应地显示列标题和行。在 iPhone 4 上,只有这么多的屏幕空间可以显示 x 列。当 iPhone 5 出来时,我利用了屏幕尺寸,以便我可以显示更多的列,这将提供 iPhone 4 无法容纳的额外信息。现在我希望利用 iPhone 6 的屏幕尺寸来显示更多信息以获得更完整的表格。
-
好的。那挺好的。但是为什么要基于设备硬编码逻辑呢?为什么不简单地查看当前视图大小并显示适合的内容?然后,您的应用可以在所有设备和方向上运行,而无需疯狂的设备和方向特定逻辑。
标签: ios iphone macros ios8 device