为什么我的应用程序在 iPhone12 mini 上的显示尺寸不正确?

use*_*002 5 iphone objective-c ios swift

我读取手机的原始高度来调整显示输出的大小,并确定顶部和底部的遮挡区域。这是一个基于选项卡的应用程序。我的显示纯粹是编程性的,它仅根据屏幕尺寸以图形方式布局。iPhone 12 mini 的显示屏比应有的小。其他 iPhone 12 类型显示正常。

在 xcode 模拟器中的各种 iPhone 类型上测试我的新应用程序时,它们看起来是正确的。但当我将该应用程序安装到 iPhone 12 mini 上时,显示屏比应有的小。我了解到模拟器返回本机高度值 2436,但手机返回值 2340。 此代码检查显示并告诉我按手机类型在屏幕顶部和底部保留多少:

nativeHeight=UIScreen.main.nativeBounds.height
    if nativeHeight==1136 || nativeHeight==1334             // SE,6S,7,8
        {reserveTopPixels=40; reserveBottomPixels=98}
    else if nativeHeight==1792                              // 11, XR
        {reserveTopPixels=88; reserveBottomPixels=198}
    else if nativeHeight==2208                              // 6s+ 7+ 8+
        {reserveTopPixels=54; reserveBottomPixels=146}
    else if nativeHeight==2436 || nativeHeight==2688        // X, XS, 11Pro, 11, Xr
        {reserveTopPixels=132; reserveBottomPixels=260}
    else if nativeHeight==2340 //iPhone 12 mini "downsampled screen"
        {reserveTopPixels=132; reserveBottomPixels=260; nativeHeight = 2436}
    else if nativeHeight==2532                              // 12, 12 pro
        {reserveTopPixels=132; reserveBottomPixels=260}
    else if nativeHeight==2778                              // 12 pro max
        {reserveTopPixels=132; reserveBottomPixels=260}
    else {reserveTopPixels=40; reserveBottomPixels=98}
Run Code Online (Sandbox Code Playgroud)

我的更正是将从电话接收的值 2340 更改为更大的值 2436。

该应用程序现在可以在模拟器和手机上正确显示。我的问题是,这是一个合理的解决方案,还是我应该尝试其他方法。

Nan*_*ish 1

nativeBounds:CGRect。:提供物理屏幕的边界矩形,以像素为单位。iPhone 12 mini的物理屏幕为1080\xc3\x972340像素

\n

iPhone 12 mini 的物理屏幕分辨率为 1080 x 2340 像素(476 ppi)。这低于操作系统报告的本机分辨率(在 UIScreen 上使用 nativeBounds)。我认为这是为了保持与 5.8 英寸型号(iPhone X/XS/11 Pro)分辨率的兼容性。

\n

参考 :

\n\n

这取决于您在何处使用此 nativeHeight 进行布局。

\n

  • Nandish,手机报告的本机高度为 2340。请参阅上面的代码。 (2认同)