iPhone X出来后,由于“刘海”的问题,给开发者门带来的一个麻烦就是屏幕的适配;现在iPhone X系列也出来了,又要进行一次适配。大部分人还是选择利用屏幕的尺寸或像素来进行适配如:
define IPHONE_IS_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !UI_IS_IPAD : NO)
define IPHONE_IS_XR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !UI_IS_IPAD : NO)
define IPHONE_IS_XS_MAX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !UI_IS_IPAD : NO)
本人觉得利用这些来判断比较麻烦,因为iPhone X系列都有一个相同点,就是iOS11以后出来的安全区特性,因此我们可以根据这一特性来进行屏幕的适配
define IPHONE_IS_X_ALL safeAreaInsets().bottom>0?YES:NO
UIEdgeInsets safeAreaInsets(void) {
UIEdgeInsets safeAreaInsets = UIEdgeInsetsZero;
if (@available(iOS 11.0, *)) {
safeAreaInsets = [[[[UIApplication sharedApplication] delegate]window]safeAreaInsets];
}
return safeAreaInsets;
}
网友评论