获取 iPhone 的物理屏幕尺寸(以英寸为单位)

Posted

技术标签:

【中文标题】获取 iPhone 的物理屏幕尺寸(以英寸为单位)【英文标题】:Getting the physical screen size in inches for iPhone 【发布时间】:2013-01-25 07:32:32 【问题描述】:

如何以英寸为单位以编程方式获取屏幕尺寸(例如 iPhone 4、3.5 英寸)。

我通过检测 iPhone/iPad 型号找到了一种方法,但硬编码不是我想要的,所以我看起来不像那样。

【问题讨论】:

为什么,看在 Chtulhu 的份上,你想要那个?我只是在开玩笑,但这个要求是一个明确的迹象,表明你走错了路。以英寸为单位,甚至...... @katzenhut 我不记得它叫什么了,但是有一个公式可以根据屏幕尺寸计算最佳视频比特率。所以就是因为这个原因。现在回想起来,我很高兴我没有像 MCKapur 建议的那样硬编码或使用硬编码库,因为从那时起又发布了 5 部 iPhone,并且发布了更多新的 ios 设备。 @katzenhut:在屏幕上显示一英寸的尺子实际上是一英寸长。 【参考方案1】:

用于屏幕的 Swift 4 版本

    let scale = UIScreen.main.scale

    let ppi = scale * ((UIDevice.current.userInterfaceIdiom == .pad) ? 132 : 163);

    let width = UIScreen.main.bounds.size.width * scale
    let height = UIScreen.main.bounds.size.height * scale

    let horizontal = width / ppi, vertical = height / ppi;

    let diagonal = sqrt(pow(horizontal, 2) + pow(vertical, 2))
    let screenSize = String(format: "%0.1f", diagonal)

【讨论】:

这是错误的解决方案。例如iPhone 12 Pro Max 是 6.7'',但代码返回 6.3''。【参考方案2】:

我发现了一个不错的 GitHub 项目,名为“GBDeviceInfo”:

if ([GBDeviceInfo deviceDetails].display == GBDeviceDisplayiPhone35Inch) 
    //3.5 inch iphone

else if ([GBDeviceInfo deviceDetails].display == GBDeviceDisplayiPhone4Inch) 
    //4 inch iphone

else if ([GBDeviceInfo deviceDetails].display == GBDeviceDisplayiPad) 
    //ipad

这里是:GBDeviceInfo

【讨论】:

这不再准确,iPhone 6 plus 报告的屏幕为 5.2 英寸,实际上是 5.5 英寸以及其他一些不正确的屏幕尺寸【参考方案3】:

这将找到设备的屏幕对角线尺寸:

float scale = [[UIScreen mainScreen] scale];

float ppi = scale * ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? 132 : 163);

float width = ([[UIScreen mainScreen] bounds].size.width * scale);
float height = ([[UIScreen mainScreen] bounds].size.height * scale);

float horizontal = width / ppi, vertical = height / ppi;

float diagonal = sqrt(pow(horizontal, 2) + pow(vertical, 2));

diagonal 将包含屏幕的对角线尺寸(以英寸为单位)。

【讨论】:

这真的为所有设备提供了正确的值吗?这样我们可以找出设备的屏幕尺寸,但每个人都在论坛上告诉这是不可能的。 不,iOS 设备的屏幕范围很广,具有不同的 PPI 计数:132、264、326 和 401。据我所知,您无法使用 SDK 从设备获取 PPI。我看到的唯一选择是将每个单独的设备名称映射到适当的 PPI。 使用 UIScreen nativeScale 获取物理屏幕的比例因子。结果将是 401 PPI 对于 plus 版本或 458 对于 X 这是错误的解决方案。某些设备的值不正确。【参考方案4】:

我找到了这个库,可以用它来获取以英寸为单位的屏幕尺寸

https://github.com/detroit-labs/IRLSize

您可以按以下方式获取以英寸为单位的屏幕尺寸

let screenHeight = UIDevice.current.physicalScreenHeight
let screenWidth = UIDevice.current.physicalScreenWidth

【讨论】:

请不要只发布一些工具/包或库作为答案。至少在答案本身中展示how it solves the problem。

以上是关于获取 iPhone 的物理屏幕尺寸(以英寸为单位)的主要内容,如果未能解决你的问题,请参考以下文章

浅谈一下web移动端基本

移动端的视口/像素基本知识

Andriod中的屏幕适配

物理尺寸Iphone XS Max和Iphone XR屏幕[重复]

前端关于移动端屏幕适配

iphone 4.7 英寸和 5.5 英寸屏幕截图尺寸是多少?