iPhone XR returns 正确的 nativeBounds 但设备上的屏幕尺寸错误

iPhone XR returns correct nativeBounds but has wrong screen size on device

我的项目目标 iOS - 11 及更高版本。它具有适用于具有适当尺寸的 XR 和 XS Max 的正确启动图像资产。在模拟器上,我的应用程序在 XR 和 XS Max 上都按预期工作。

但是,用户在真实设备上报告了 UI 问题。经过一些研究,它看起来像在真实设备上

[UIScreen mainScreen].nativeBounds.size

returns 正确的值。但似乎设备本身认为它有 iPhone X 屏幕尺寸(就像我没有使用正确的启动屏幕图像一样)。在我看来 returns 错误的值

[UIScreen mainScreen].bounds.size

我认为这一款 returns 的价值不是 iPhone XR,而是 iPhone X。

有人遇到过这样的问题吗?

我遇到了同样的问题,我找到了原因。您可以在 assets 中查看 LaunchImage。有 iPhone XR 的图像吗?如果您没有 iPhone XR LaunchImage,XR 的屏幕尺寸将使用 iPhone X 计算。因此 制作一个XR 的 LaunchImage。 希望这有帮助。

iPhone XR 在(虚拟)点上使用的尺寸与 iPhone X 或 iPhone XS 不同。它使用与新的 iPhone XS Max 相同的点尺寸,但仅使用 @2x 而不是 @3x 渲染,就像 Max 一样(每英寸像素密度较低)。您可以阅读有关每个 iPhone 模型 here.

的屏幕尺寸、点数、渲染尺寸等的更多信息

XCAssets 中缺少的启动图像模板也会影响新一代 iPads,例如新的 iPad Pro 11" 与标准的 3/4 宽高比略有不同,其他 iPad 有。深入研究缺少模板问题让我从 2015 年开始 radar post缺少 iPad Pro App Icon 和 Launch Image 模板,评论指出:

[...] and Developer relations reported in a radar comment that they no longer support launch images and will not be adding the iPad pro launch image size to asset catalogs.

Apple 似乎不鼓励在 XCAssets 中使用启动图像,并建议改用 Launch Screen.storyboard。根据使用的设备或模拟器,它将 "auto-size" 到正确的尺寸(以及 UIScreen.main.boundsUIScreen.main.nativeBounds 的输出)。

就我而言,问题出在特定的用户设备设置上。 设置 -> 显示和亮度 -> 显示缩放开关打开。 这导致 return 错误

[UIScreen mainScreen].bounds.size

值运行时间