44 像素的宽度是不是等同于所有设备的相同物理尺寸?

Posted

技术标签:

【中文标题】44 像素的宽度是不是等同于所有设备的相同物理尺寸?【英文标题】:Does a width of 44 pixels equate to the same physical size for all devices?44 像素的宽度是否等同于所有设备的相同物理尺寸? 【发布时间】:2017-03-26 21:45:57 【问题描述】:

我的工作基于 iPhone 6 的屏幕尺寸,即 1136x750 像素、326 ppi。我更关心按钮的物理尺寸(出于某种原因),而不是它们的数字尺寸。

如果 iPhone 6 上宽度为 44 像素且物理宽度为 0.2 英寸的按钮在 iPhone 6 Plus 上具有相同的物理宽度,即 401 ppi?

如果不是,这不应该违反 Apple 的准则吗?他们最初测试了 44 像素作为最小宽度,但随着 ppi 越大,相同的宽度在物理上会减小。

这是否以某种方式调整/缩放?

编辑:我觉得自己很愚蠢,这一切都很明显。

编辑 2:我最初担心的是 iPhone 6 的屏幕上总共可以有

T = 375.0 / 44.0 = 8 个按钮。

而 iPhone 6 Plus 总共可以有

T' = 540.0 / 44.0 = 12 个按钮,每个按钮在物理上更小。

解决此问题的方法是计算出 iPhone 6 Plus 按钮的调整宽度,即 w' = 44.0 px * 401 ppi / 326 ppi = 54.0 像素。

因此,iPhone 6 Plus 上的每个按钮都应具有 54 像素的宽度以具有相同的物理尺寸。

我想对了吗?

【问题讨论】:

【参考方案1】:

你在数学上是对的,ios 中的积分与物理尺寸无关。

physicalSize = points * scale / ppi

5.5" 44*3/401 ≈ 0.33 英寸

4.7" 44*2/326 ≈ 0.27 英寸

因此,为了保证相同的物理尺寸,您需要为每个设备手动计算它,这无论如何都不是最佳做法。

从上面的公式可以得到:

points = physicalSize * ppi / scale

Swift 函数:

func points(fromInches inches: CGFloat) -> CGFloat 
    return inches * ppi / UIScreen.main.scale


var ppi: CGFloat     
    //return device ppi

查看this关于以编程方式获取 ppi 的问题:

编辑:

我仍然建议考虑点数,而不是物理屏幕尺寸。

【讨论】:

我怀疑这是真的,因为 Apple 违反了自己的准则。 你到底怀疑什么? 原始 iPhone 上的 44 点宽度不能在最新 iPhone 上具有更小的物理尺寸。它们应该具有完全相同的物理尺寸。 Apple 确实对某个物理尺寸进行了研究,该尺寸在 163 ppi 的原始 3.5 英寸 iPhone 上恰好是 44 像素。因此,所有设备都应该扩展以保持物理尺寸。 除非规模更大的物理尺寸,在这种情况下,我很好,苹果很好,我们都很高兴。这就是你实际计算的结果,只是我无法绕开它并让自己相信 iPhone 6 Plus 上的 44 点宽度比 iPhone 6 具有更大的物理尺寸。

以上是关于44 像素的宽度是不是等同于所有设备的相同物理尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

根据设备宽度和用户带宽提供不同尺寸/分辨率的图像

Android中分辨率,DPI,DP与PX对应关系

微信小程序——rpxpxrem等尺寸间关系浅析

移动设备的尺寸

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

如何根据屏幕的物理尺寸按比例缩放布局?