現(xiàn)在iPhone系列的手機(jī)官方在售機(jī)型中,除iPhone SE 2全是是FaceID系列了(劉海屏),如今iPhone 12因為疫情原因,來的雖然比往年晚了點(diǎn),但是它還是強(qiáng)勢來襲,各大機(jī)構(gòu)報告、評測層出不窮,又會有多少“真香”定律呢?
這,與本文無關(guān),今天要看看iPhone 12系列是否又要迭代適配代碼了呢?
判斷長寬比方式
為了研究這個,前往APP預(yù)覽規(guī)范 整理出以下表格

各iPhone長寬比
有譜了,那按這個就有了以下的方式去識別是否是
FaceID的iPhone了
+ (BOOL)isFaceIDSeriecsiPhone
{
if (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPhone) {
NSLog(@"This not is iPhone! ");
return NO;
}
CGSize size = [UIScreen mainScreen].bounds.size;
NSInteger value = size.width / size.height * 100;
if (value == 216 || value == 46) {
return YES;
}
return NO;
}
雖然表格數(shù)值是217這是Excel四舍五入,但乘了100,再NSInteger取整的,取216即可。也不知道明年的iPhone是什么屏比,這個方式也不是一勞永逸,出了新的迭代再改,APP一年都不更新,那離下架也不遠(yuǎn)了(皮一下)。
判斷底部安全區(qū)域
另一個方法是先判斷系統(tǒng)版本,再獲取UIWindow判斷底部安全區(qū)域,形式,有些是獲取
[UIApplication sharedApplication].delegate.window;、[UIApplication sharedApplication].keyWindow;這個在iOS 13之后不可用了。那就從windows找
+ (BOOL)isFaceIDSeriecsiPhone
{
if (UIDevice.currentDevice.userInterfaceIdiom != UIUserInterfaceIdiomPhone) {
NSLog(@"This not is iPhone! ");
return NO;
}
if (@available(iOS 11.0, *)) {
UIWindow * window = [self mainWindow];
// 判斷安全區(qū)域方式
if (window.safeAreaInsets.bottom > 0.0) {
return YES;
}
}
return NO;
}
+(UIWindow *)mainWindow{
id appDelegate = [UIApplication sharedApplication].delegate;
if (appDelegate && [appDelegate respondsToSelector:@selector(window)]) {
return [appDelegate window];
}
NSArray *windows = [UIApplication sharedApplication].windows;
if ([windows count] == 1) {
return [windows firstObject];
} else {
for (UIWindow *window in windows) {
if (window.windowLevel == UIWindowLevelNormal) {
return window;
}
}
}
return nil;
}
safeAreaInsets
豎屏:UIEdgeInsets -> (top = 44, left = 0, bottom = 34, right = 0)
橫屏:UIEdgeInsets -> (top = 0, left = 44, bottom = 21, right = 44)