【发布时间】:2015-07-11 11:12:38
【问题描述】:
短
有人知道通过代码确定 iPhone 的物理尺寸(以英寸为单位)的方法吗?
我们希望在 iPhone 6+ 和任何未来至少一样大的设备上拥有稍微不同的 UI。复杂之处在于它们在非原生模式下运行,因此 6+、6 和 5 的屏幕边界始终为 320x568 单位。
长
据我所知,没有办法做到这一点(也许这是苹果有意识的决定)?
我可以通过其设备名称 (iPhone7,1) 识别 iPhone 6+,这目前很好,但我只能猜测如何识别未来的设备。例如,如果有一个 iPhone 7+ 的设备名称为“iPhone8,1”,它会和 6+ 一样大吗?
理想情况下,我只需询问设备的尺寸(高度/宽度)(以英寸为单位),然后使用它来决定使用哪个 UI。或者,如果我有 dpi,我可以从中计算出英寸。
我不能为此使用新的尺寸等级,因为我们在纵向 UI 中执行此操作,并且 5、6、6+ 在该方向上都是“紧凑的”...
可能有各种“技巧”,但这些似乎不可靠。这包括假设 nativeScale >= 3 或横向尺寸 class== "regular" ==> iPhone 6+ 或更大。
就目前的情况而言,对于代码无法识别的任何未来设备,我们可能不得不默认使用我们的 5 / 6 UI(直到我们可以进行更新)...
有什么想法吗?
相关链接:
iOS Different Font Sizes within Single Size Class for Different Devices
【问题讨论】:
-
可以通过调用 [[UIScreen mainScreen] scale] 来确定 DPI,但它返回一个整数...
-
总之,作为一名 Apple 开发人员,您有足够的注意来调查 SDK 测试版的规模/密度/外形问题......
-
因此,对于当前设备,iPhone 5 和 iPhone 6(以及 iPhone 4S)的 scale 将返回 2。在我们的例子中,它也会为 iPhone 6+ 返回 2,因为我们没有在原生模式下运行(6 和 6+ 基本上是放大的 iPhone 5)。我相信 nativeScale 会为 iPhone 6+ 返回 3(即使在非本地模式下甚至在模拟器中),但假设未来的 @3x 设备与 iPhone 6+ 一样大似乎不可靠...... :(跨度>
-
我们也处于一个有点独特的情况,我们发布了 400 多个 (!) 应用程序并且还在增加。因此,必须重新发布所有这些以支持新设备是有问题的。我们正在考虑的一种方法是基本上将设备信息移动到服务器上,这样我们就可以在新设备推出时对其进行更新,而无需重新发布应用程序...
标签: ios objective-c iphone iphone-6-plus