获取 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 的物理屏幕尺寸(以英寸为单位)的主要内容,如果未能解决你的问题,请参考以下文章