1. 通过获取设备的 device model 来判断
每一台 iOS 设备都有对应的硬件编码/标识符,称为 device model 或者叫 machine name
机型 | 对应的device model |
---|---|
iPhone X | iPhone10,3 和 iPhone10,6 |
iPhone XS | iPhone11,2 |
iPhone XR | iPhone11,8 |
iPhone XS Max | iPhone11,4 和 iPhone11,6 |
我们可以通过获取设备的device model判断是否iPhone X
+ (BOOL)isIPhoneX1
{
static BOOL isiPhoneX = NO;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
#if TARGET_IPHONE_SIMULATOR
/**模拟器*/
NSString *platForm = NSProcessInfo.processInfo.environment[@"SIMULATOR_MODEL_IDENTIFIER"];
#else
struct utsname systemInfo;
uname(&systemInfo);
NSString *platForm = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
#endif
// 判断 device model 是否为 "iPhone10,3" 和 "iPhone10,6" 或者以 "iPhone11," 开头
isiPhoneX = [platForm isEqualToString:@"iPhone10,3"]||
[platForm isEqualToString:@"iPhone10,6"]||
[platForm hasPrefix:@"iPhone11,"];
});
return isiPhoneX;
}
2. 通过设备的 宽高 来判断
现在iPhone X设备的屏幕宽高对应的开发尺寸只有两种,分别为 375pt * 812pt 和 414pt * 896pt,因此我们可以根据屏幕的高度来判断设备是否为 iPhone X
+ (BOOL)isIPhoneX2
{
static BOOL isiPhoneX = NO;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
CGSize screenSize = [UIScreen mainScreen].bounds.size;
isiPhoneX = (CGSizeEqualToSize(screenSize, CGSizeMake(375, 812))||
CGSizeEqualToSize(screenSize, CGSizeMake(812, 375))||
CGSizeEqualToSize(screenSize, CGSizeMake(414, 896))||
CGSizeEqualToSize(screenSize, CGSizeMake(896, 414)));
});
return isiPhoneX;
}