美文网首页
iPhoneXR和全面屏iPad判断

iPhoneXR和全面屏iPad判断

作者: LamSpeech | 来源:发表于2019-09-25 17:54 被阅读0次

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

        }

    }

    相关文章

      网友评论

          本文标题:iPhoneXR和全面屏iPad判断

          本文链接:https://www.haomeiwen.com/subject/sclwuctx.html