[UIScreen mainScreen].scale 对于非 Retina iPad 总是返回 2

Posted

技术标签:

【中文标题】[UIScreen mainScreen].scale 对于非 Retina iPad 总是返回 2【英文标题】:[UIScreen mainScreen].scale always returns 2 for Non-Retina iPads 【发布时间】:2014-10-04 06:48:55 【问题描述】:

使用 xcode 5.1.1 和 ios 7.1 构建 iPhone 专用应用程序。

在任何非视网膜设备(ipad mini、模拟器、ipad 2)上运行此应用时,[UIScreen mainScreen].scale 总是返回 2,让我无法检测我是否在视网膜屏幕上。

这与所有其他关于检查视网膜的帖子相反 (Detect Retina Display)

除了检查硬编码设备列表之外,还有其他方法吗?

【问题讨论】:

一个 iPhone 应用程序使用 iPad 上的视网膜资源。比例始终为 2.0。 对于 iPhone-only 应用程序是 iPad 总是 Retina 屏幕。构建通用应用程序,然后检测 Retina iPad。 这太糟糕了,因为我有一个只出现在非视网膜 ipad 上的错误。我想唯一的解决方案是手动检查设备 ID。 @IsaacPaul,如果那不是一个通用应用程序,你不必担心这个错误,iPad 在盒装环境中运行 iPhone 应用程序,应用程序可能看起来不同于应用在真实 iPhone 上的外观(例如状态栏等...)。 错误是不可接受的,哈哈。它们必须被修复。一切都与用户体验有关,iPad 和 iPad mini 用户不会满意。 【参考方案1】:

似乎唯一的方法是检查平台标识符。

我在这里实现了:https://gist.github.com/izackp/2ee0ca4b6c731b254e55

但是,它在模拟器上并不准确,因为我没有根据所使用的模拟器获得唯一 id,并且它不适用于未来使用视网膜资源且具有非视网膜显示器的设备。

【讨论】:

以上是关于[UIScreen mainScreen].scale 对于非 Retina iPad 总是返回 2的主要内容,如果未能解决你的问题,请参考以下文章

横向模式的“UIScreen mainScreen] applicationFrame]”

iPad:[UIScreen mainScreen].bounds 返回错误的坐标

为啥 [UIScreen mainScreen].bounds] 没有返回全屏尺寸?

[UIScreen mainScreen].bounds 与 [UIApplcation sharedApplication].keyWindow.bounds?

[UIScreen mainScreen].scale 对于非 Retina iPad 总是返回 2

[UIScreen mainScreen].bounds.size 在 iOS8 中是不是变得依赖于方向?