最近在写UTools4的代码,在网速显示功能适配iPhone 12 mini的时候,居然遇到了一个坑。

在查询了官方开发文档后发现,iPhone 12 mini的逻辑分辨率为360*780pt。但是在进行实机测试的时候,发现了毫无反应。这个时候就很疑惑了,还以为代码哪里出了问题。然后尝试打印出来的屏幕分辨率为375*812pt,啊这。。。于是乎百度了下。早有人已经发现了这个问题。

5.4 寸 iPhone 12 mini 的屏幕分辨率为 1080px × 2340px,PPI 为 476,清晰度位列 iPhone 12 系列第一名。由 iPhone 12 mini 的屏幕分辨率除以比例因子 @3x 得到逻辑分辨率 360pt × 780pt,很多人自然而然地就会以为这就是 iPhone 12 mini 的逻辑分辨率。然而通过已经发布的 Xcode 12.1 GM 版本的模拟器可以查到 iPhone 12 mini 的渲染分辨率(截图的大小)实际为「1125px × 2436px」,比物理分辨率(屏幕的物理参数)放大了 1.04 倍。同当年的 iPhone 6 Plus 一样,Apple 再次使用了一样的变化手法。1125px × 2436px 的渲染分辨率对应的逻辑分辨率为 375pt × 812pt@3x,正是之前 5.8 寸 iPhone 11 Pro 的逻辑分辨率,这样 app 想完美运行在 iPhone 12 mini 上就无需再进行额外的适配工作。但由于像素不是点对点显示的,显示图像可能会有不锐利的问题,但由于其高 PPI 的存在,这个感知不会明显。

最终笔者还是通过判断identifier解决了这个问题。搞定!