判断iPhoneX适配问题

最近在公司没事运行了之前写的一个项目,发现在iphonexs max上有问题,发现是我的刘海屏判断有问题,

错误示例1:

#define AskStatusBarHeight ([[UIApplication sharedApplication] statusBarFrame].size.height)

#define Ask_IPHONE_X (kStatusBarHeight >= 44.0f)

错误示例2:

//判断iPhoneX

#define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

//判断iPHoneXr

#define IS_IPHONE_Xr ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

//判断iPhoneXs

#define IS_IPHONE_Xs ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

//判断iPhoneXs Max

#define IS_IPHONE_Xs_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

#define IS_IPHONE_XSR ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? YES : NO)

现在看看之前写的好蠢,后来发现在iOS11后更新了一个新方法:safeAreaInsets,然后又重新根据这个方法在网上找到了一个判断iOS 刘海平手机的方案:

#define IPHONE_X (@available(iOS 11.0, *) ? [[[UIApplication sharedApplication] delegate] window].safeAreaInsets.bottom > 0.0 : NO )

结果发现这样调用会报警告。

正确的方案如下:

#define IPHONE_X 

({BOOL isPhoneX = NO;

if (@available(iOS 11.0, *)) {

isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;

}

(isPhoneX);})

原文地址:https://www.cnblogs.com/FZP5/p/11155906.html