今天遇到了一个用户反映的iPhoneXR屏幕app显示出现问题的情况,因为没有其他的XR用户反映(仅遇到这一例,无法复现),所以上网查了很多资料,最后发现iPhoneXR判断的一个问题,另附全面屏iPad判断方式,如下:
1、 iPhoneXR判断
iPhoneXR官方的适配尺寸是:828*1792,但实际真机运行时会遇到750*1624的情况,所以真正的判断宏是下面的样子
#define iPhoneXR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(828,1792), [[UIScreen mainScreen] currentMode].size) || CGSizeEqualToSize(CGSizeMake(750,1624), [[UIScreen mainScreen] currentMode].size)) : NO)
2、 全面屏iPad判断
全面屏iPad目前包括11和12.9英寸两款,但由于iPad Pro也是12.9寸,仅通过屏幕尺寸判断的方式是不可行的。
第一种方式:
先通过判断设备型号是否包含iPad8,再结合屏幕尺寸判断
#define iPadX ([“当前设备型号” containsString:@"iPad8"] && ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(1668, 2388), [[UIScreen mainScreen] currentMode].size) || CGSizeEqualToSize(CGSizeMake(2048, 2732), [[UIScreen mainScreen] currentMode].size)) : NO))
第二种方式:
虽然用上述方法实现了全面屏iPad的判断,但其实还有一种简单实用的方法(借助iOS11之后新增的safeAreaInsets属性)
if (@available(iOS 11.0, *)) {
CGFloat safeAreaBottom = [UIApplication sharedApplication].delegate.window.safeAreaInsets;
if (!UIEdgeInsetsEqualToEdgeInsets(safeAreaBottom, UIEdgeInsetsZero) && 当前设备为iPad) {
// 当前设备为全面屏iPad
}
}
网友评论