iPhoneXR和全面屏iPad判断

2019-09-25  本文已影响0人  LamSpeech

今天遇到了一个用户反映的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

    }

}

上一篇下一篇

猜你喜欢

热点阅读