昨天为了适配iPhone X系列的屏幕时发现项目中并没有正确配置启动图,导致最初定义的宏不好使。宏的代码如下:
// 设备是否是iPhoneX
#define kDevice_is_iPhone_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
//判断iPHoneXr
#define kDevice_is_iPhone_XR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)
//判断iPhoneXs
#define kDevice_is_iPhone_XS ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
//判断iPhoneXs Max
#define kDevice_is_iPhone_XS_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)
启动图放的尺寸如下图,如果此处的启动图的尺寸设置不正确,那么上述定义的宏会一直不好使。

在项目中我们可能会用到iPhone X系列来进行机型的判断,然后去适配,在启动图设置正确之后可以使用上述的宏,也可以用另外一个方法,写起来会更简便一些,即便以后新增机型,我们也不用每次都去新增一个尺寸。方法如下
// 判断是否为iPhone X 系列
#define kDevice_iPhoneX_Series \
({BOOL isPhoneX = NO;\
if (@available(iOS 11.0, *)) {\
isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;\
}\
(isPhoneX);})
网友评论