首页 > 编程知识 正文

苹果x是多大的屏幕尺寸,iphone11跟xr对比

时间:2023-05-04 19:14:07 阅读:172324 作者:3193

文章目录iPhone屏幕分辨率的最终准则符合新iPhone X设备检测iPhone X/XS/XR设备的几种方法。 第一种方法是通过获得设备的设备模型进行判断。 二是通过获取画面高度进行判断的方法。 三是根据底部安全区域的高度进行判断的方法。 第四种是根据是否支持FaceID来判断的方法。 第五个是用户状态栏

本文是我们前几天发的两个小信号的总结,主要包括三个部分。

iPhone屏幕分辨率如何匹配新的iPhone X设备检测设备是iPhone X/XS/XR的几种方法iPhone屏幕分辨率终极指南上周,苹果发布了三款新的iPhone设备各个画面数据如下。

iPhone XS: 5.8英寸、375pt*812pt(@3x ); iPhone XR: 6.1英寸、414pt*896pt(@2x ); iPhone XS Max: 6.5英寸、414pt*896pt(@3x ); 在国外的PaintCode网站上,有一篇文章《The Ultimate Guide To iPhone Resolutions》是从第一代iPhone到最新发布的iPhone XS Max,对所有iPhone设备的画面数据进行了组织,包括开发大小(points )、物理大小)以及实际的渲染

从图上的数据可以总结以下几点。

5.8英寸的iPhone X/XS、6.1英寸的iPhone XR和6.5英寸的iPhone XS Max的屏幕长宽比一致,约为0.462; iPhone X/XS的屏幕宽度(开发尺寸)和4.7英寸的iPhone 8一样为375pt,只增加了高度

145pt; iPhone XR和iPhone XS Max的屏幕宽度(开发尺寸)与5.5英寸iPhone 8 Plus相同,均为

414pt,只是在高度上增加了160pt,因此,设计师在打印时可以以iPhone 8和iPhone 8 Plus的屏幕宽度为基准分别进行UI布局,对于不同高度的屏幕,纵向扩展内容即可。

我们发现,除了适合新的iPhone X设备外,对于不适合新屏幕大小的项目,我们将直接编译并在新设备的iPhone XR和iPhone XS Max上运行。 它们在放大模式下自动匹配。 以5.8英寸的iPhone X屏幕为基准均匀比例放大。 此时,通过代码获取的画面宽度为375pt * 812pt

那么,如何正确适应新的屏幕尺寸呢?

如果您的项目以LaunchScreen.storyboard为起始页,则只需用Xcode 10重新编译项目即可。如果您的项目是Assets.xcassets的LaunchImage中不同大小的

828px * 1792px和1242px * 2688px的分辨率的图像如图2所示。

检测iPhone X/XS/XR设备的几种方法最后,代码如何确定当前设备是否为iPhone X呢?

注:这里的iPhone X是指上面介绍的屏幕大小为5.8、6.1、6.5英寸三种类型,带有顶部qldjw和底部操作条的iPhone设备。

最初,我们采用了一种比较简单的方法,即获取屏幕的高度以确定其是否等于812.0或896.0,如图3所示。

但是,这种方法有一个小缺陷,需要考虑以下两点。

在APP支持横纵画面切换的情况下,在横画面模式下也能够正确判断; 在模拟器调试时,可以正确判断当前所选规则的模拟器类型是否为iPhone X,所以我们重新整理一下目前已知的几种检测设备是否为iPhone X,以供参考。 不足的地方欢迎补充。

方法1 :通过获取设备的设备模型,确定每个iOS设备具有相应的硬件代码/标识符。 称为设备模型或机器名称。 获取设备模型/机器名称的方法有以下两种:

例如,去年发布的第一代iPhone X对应的device mode是iphone10、3和iphone10、6,而今年最新发布的iPhone XS对应的iphone11、2、iPhone XS Max对应的iphone11

3359 www.the iphone wiki.com/wiki/models但是,由于上述两种获取设备模型的方法在模拟器中运行得到的值为i386或x86_64,因此在模拟器中使用以下方法

//

获取模拟器所对应的 device modelNSString *model = NSProcessInfo.processInfo.environment[@"SIMULATOR_MODEL_IDENTIFIER"];

综上,我们可以通过判断 device model 是否为 “iPhone10,3” 和 “iPhone10,6” 或者以 “iPhone11,”(新设备)开头,来检测设备是否为 iPhone X,完整代码如下:

方式二:通过获取屏幕的宽高来判断

正如我们前面讲到,目前 iPhone X 设备的屏幕宽高对应的开发尺寸只有两种,分别为 375pt * 812pt 和 414pt * 896pt,因此我们可以根据屏幕的高度来判断设备是否为 iPhone X。但是此时需要考虑设备处于横屏或者竖屏的情况,这两种情况的宽高刚好是相反的(当然,如果你的 App 不用支持横屏的情况,就相对比较简单了)。

在 UIDevice 中提供了一个 orientation 属性用于获取设备的方向(横向、竖向、或者水平),一开始我们想着先通过这个属性判断设备处于横屏或者竖屏,然后分别取其对应的屏幕宽度(横屏下)或者高度(竖屏下)来判断,但是当这个属性的值为 FaceUp 或者 FaceDown(即设备放在水平面上),我们是无法知道此时设备是处于横屏还是竖屏的。

后面我们想了一个简便的方法,即获取屏幕的宽度和高度,取较大一方进行比较是等于 812.0 或 896.0,代码如下:

方式三:通过底部安全区域的高度来判断

在去年 iPhone X 发布后,为了适配顶部的浏览和底部的操作条,苹果在 iOS 11 上引入安全区域概念,建议开发者在安全区域内进行 UI 布局,因此我们可以获取屏幕 keyWindow 的 safeAreaInsets 值来判断设备是否 iPhone X。

iPhone X 在竖屏下,keyWindow 的 safeAreaInsets 值为:

{top: 44, left: 0, bottom: 34, right: 0}

而在横屏下,其值为:

{top: 0, left: 44, bottom: 21, right: 44}

因此,我们可以比较 safeAreaInsets 的 bottom 是否等于 34.0 或者 21.0 来判断设备是否为 iPhone X,因为其他设备对应的 bottom 横竖屏下都为 0,代码如下:

不过该方式有个不足是,必须在 AppDelegate 的 didFinishLaunchingWithOptions 回调中等 keyWindow 初始化之后才能正确判断。

方式四:通过是否支持 FaceID 判断

由于目前只有 iPhone X 设备支持 FaceID,因此我们也可以通过判断设备是否支持 FaceID 来判断,代码如下:

不足:如果用户禁用 canEvaluatePolicy:error: 方法的使用将无法正确判断,而且在也不适用于模拟器中的判断。

方式五:通过 UIStatusBar 的高度判断

在 iPhone X 之前,所有 iPhone 设备的 StatusBar(状态栏)高度都为 20pt,而 iPhone X 的为 44pt,因此我们可以通过获取状态栏的高度判断是否等于 44.0 来检测设备是否为 iPhone X,代码如下:

不足:该方法只适用于竖屏且显示状态栏的情况下才能正确检测,而在横屏模式下,或者 App 隐藏导航栏时,获取到的状态栏高度都为 0(statusBarFrame 的值为 CGRectZero),就无法判断了。

你是否有其他判断方式呢?欢迎补充~

结语

最后,绝大部分场景,我们需要检测设备是否为 iPhone X 是为了适配顶部的qldjw区域和底部的操作条区域,但是这里我们更推荐通过 Auto Layout 结合 Safe Area 进行 UI 布局,以适应越来越复杂的屏幕状况。

原文链接

文中包含大量代码截图,如果你需要复制使用其中代码,请查阅这篇博文:

https://kangzubin.com/iphonex-detect/ 参考连接

The Ultimate Guide To iPhone Resolutions
https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions

iPhone X Screen Demystified
https://www.paintcodeapp.com/news/iphone-x-screen-demystified

Detect if the device is iPhone X
https://stackoverflow.com/questions/46192280/detect-if-the-device-is-iphone-x/

iOS Device Model
https://www.theiphonewiki.com/wiki/Models

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。