思路
iPhoneX系列都是刘海屏,状态栏高度都是44,不管是普通状态下还是特殊状态下(通话中或热点被接入)。
其余机型的状态栏高度在常规状态下是20,特殊状态下(通话中或热点被接入)是40。
因此“状态栏高度==44”可以作为切入点,判断是否是iPhoneX系列机型的宏如下:
#define iPhoneXSeries (([[UIApplication sharedApplication] statusBarFrame].size.height == 44.0f) ? (YES):(NO))
隐患
这个判断方法目前可行,但是未来是否可行就不得而知了,毕竟将来iPhone会设计成哪样没有人知道。
所以我就去S.O.问了一下,想看看是否有更合适的做法,结果让大佬成功的装了一次逼还完美的避开了我的问题:
https://stackoverflow.com/questions/52444359/how-to-judge-the-iphone-is-iphonex-series
网友评论
#define KIsiPhoneXAll (((int)((SCREEN_HEIGHT/SCREEN_WIDTH)*100) == 216)?YES:NO)
+ (BOOL)isIphoneX {
static BOOL isIphoneX = NO;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSSet *platformSet = [NSSet setWithObjects:@"iPhone10,3", @"iPhone10,6" @"iPhone11,8", @"iPhone11,2", @"iPhone11,4", @"iPhone11,6", nil];
struct utsname systemInfo;
uname(&systemInfo);
NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
if ([platform isEqualToString:@"x86_64"] || [platform isEqualToString:@"i386"])
isIphoneX = YBIMAGEBROWSER_HEIGHT == 812;
else
isIphoneX = [platformSet containsObject:platform];
});
return isIphoneX;
}