iPhoneXR和全面屏iPad判断

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

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、为什么 培养自控力非常重要? 自控力是培养孩子专注力以及孩子好习惯的最基础能力。家庭教育的目标:培养三好孩子,...
    夜蝴蝶FLY阅读 568评论 0 0
  • 1 最近在简书坚持日更,已经近五十天了。 坚持日更,是我一直的想法。之前曾经开始过一段时间,但后来被各种琐事纠缠,...
    莹光灼华阅读 478评论 4 16
  • 物欲横流的世界,陌生的城市,夜深了。 刚从迪斯科舞厅里走出来,刘鹏一脸轻松。 曲畅,这一位天真纯洁的女子,接到他打...
    流觞曲水的_猫白阅读 586评论 9 11
  • 跳绳二十分钟。 运动这件事一定要自己喜欢,如果暂时不喜欢,也要“欺骗”自己去喜欢。 距离第一次跳绳,现在腿也没有疼...
    Nicole快跑阅读 141评论 0 1