iPhone XR屏幕分辨率根据截图、苹果官网等:
828x1792
根据 Swift 的 iPhone XR 屏幕分辨率:
375x812(或 750x1624)
为什么以及如何处理它?!
注意:除此之外,所有 iphone Xx 都能正常工作 - iphone XR(+iphone XR 模拟器)
iPhone XR屏幕分辨率根据截图、苹果官网等:
828x1792
根据 Swift 的 iPhone XR 屏幕分辨率:
375x812(或 750x1624)
为什么以及如何处理它?!
注意:除此之外,所有 iphone Xx 都能正常工作 - iphone XR(+iphone XR 模拟器)
有两个不同的概念:UIKit size和Native resolution。
UIKit 大小由点表示,并在您在项目中定位视图时使用。假设您的屏幕大小为 414x896 点,并且您将视图居中到位置 [207,448],您的视图将位于屏幕的中心。
原生分辨率由像素表示,它告诉设备屏幕有多少像素。您可以通过将 UIKit 大小与每个设备各自的原生缩放因子相乘来获得设备的原生分辨率。
我为所有支持 iOS 12 的 iPhone 创建了这些尺寸、比例因子和分辨率的表格
iPhone | UIKit size (points) | Native resolution (pixels) | Native Scale factor
-------------|---------------------|----------------------------|--------------------
Xs Max | 414x896 | 1242x2688 | 3
X, Xs | 375x812 | 1125x2436 | 3
Xr | 414x896 | 828x1792 | 2
6+,6s+,7+,8+ | 414x736 | 1080x1920 | 2.608
6,6s,7,8 | 375x667 | 750x1334 | 2
5s,SE | 320x568 | 640x1136 | 2
...从这张表中,您可以看到您的 iPhone Xr 的 UIKit 尺寸为414x896,而不是您在问题中所写的375x812 。
您可以通过获取屏幕的边界来获取设备的 UIKit 大小
UIScreen.main.bounds
通过获取本机边界和本机分辨率
UIScreen.main.nativeBounds
...这些中的每一个都适用于 iPhone Xr,因此请再次检查您是否在 iPhone Xr 上运行代码,而不是在 UIKit 大小为 375x812的 iPhone Xs/X 上运行代码。此外,这个750x1624只是 Xr 原始分辨率的一些奇怪比例,因此请检查您是否没有做任何额外的数学运算。
这是因为您的 iPhone XR 上启用了“显示缩放”。
设置 -> 显示和亮度 -> 显示缩放 -> 设置为标准
物理屏幕尺寸和 UIKit 尺寸(像素与点)之间存在差异。
UIKit 使用点,一个点可以由多个像素组成(这就是@2x,@3x)的用武之地。
XR 与其他 X 设备的主要区别在于 XR 使用@2x,其他设备使用@3x。
以下是 Apple 的相关文档:https ://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/Displays/Displays.html
PaintCode 还制作了一个非常方便的图形来说明这一点:
https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
编辑以回答 rmaddy 的评论。
如果故事板设置为显示 iPhone X,那么这就是在视图布局之前将返回的大小。
您正在获得 iphone X 分辨率,这很可能是因为您在情节提要中使用了 iphone X。该代码首先为您提供故事板分辨率。如果要获取实际大小,请在使用分辨率的代码之前调用 layoutIfNeeded() 方法