目前已发布的所有 iPhone 设备的屏幕数据,包括了最新上市的 iPhone XS、iPhone XS Max 和 iPhone XR,请参考《iPhone 屏幕分辨率终极指南》。
最后我们介绍了一种在代码中通过获取屏幕的高度判断是否等于 812.0
或 896.0
来检测设备是否为 iPhone X 的方法,但该方法存在小瑕疵,需要考虑一下两点:
- 当 App 支持横竖屏切换时,在横屏模式下也能够正确判断;
- 在模拟器中调试时,能够正确判断当前所选则的模拟器类型是不是 iPhone X;
因此,本条小集重新整理一下我们目前所了解到的几种检测设备是否为 iPhone X 的方式,供大家参考,不足之处欢迎补充。
- 通过获取设备的 device model 来判断
- 通过获取屏幕的宽高来判断
- 通过底部安全区域的高度来判断
- 通过是否支持 FaceID 判断
- 通过 UIStatusBar 的高度判断
备注:这里所说的 iPhone X 泛指屏幕大小为 5.8、6.1、6.5 英寸三种尺寸的 iPhone 设备。
在没有适配的情况下,新设备都是以放大模式自动适配的(以 5.8 寸的 iPhone X 屏幕为基准等比例放大),此时在代码中获取到的屏幕宽高都为 375pt * 812pt
,你需要在启动图 LaunchImage
添加对应分辨率的图片就能获取到真正的 414pt * 896pt
高度。
方式一:通过获取设备的 device model 来判断
每一台 iOS 设备都有对应的硬件编码/标识符,称为 device model
或者叫 machine name
,我们可以通过如下两种方法来获取 device model/machine name。
#import <sys/sysctl.h>
#import <sys/utsname.h>
// 获取 device model/machine name 的方法一
+ (NSString *)machineName1 {
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = (char *)malloc(size);
if (machine == NULL) {
return nil;
}
sysctlbyname("hw.machine", machine, &size,