判断是否是iPhoneX系列机型

作者: Lol刀妹 | 来源:发表于2018-09-23 02:36 被阅读311次

    思路

    iPhoneX系列都是刘海屏,状态栏高度都是44,不管是普通状态下还是特殊状态下(通话中或热点被接入)。

    其余机型的状态栏高度在常规状态下是20,特殊状态下(通话中或热点被接入)是40。

    因此“状态栏高度==44”可以作为切入点,判断是否是iPhoneX系列机型的宏如下:

    #define iPhoneXSeries (([[UIApplication sharedApplication] statusBarFrame].size.height == 44.0f) ? (YES):(NO))
    

    隐患

    这个判断方法目前可行,但是未来是否可行就不得而知了,毕竟将来iPhone会设计成哪样没有人知道。

    所以我就去S.O.问了一下,想看看是否有更合适的做法,结果让大佬成功的装了一次逼还完美的避开了我的问题:
    https://stackoverflow.com/questions/52444359/how-to-judge-the-iphone-is-iphonex-series

    相关文章

      网友评论

      • vanessa_imp:可以判断手机型号,这个在模拟器上不行,也可以判断手机宽高是否大于等于812(横屏就是宽了),也可以判断safeArea的底部是否大于0,如果是横屏就是判断left和right是否大于0。方法还是挺多的。
      • Henrya:试试高宽比
        #define KIsiPhoneXAll (((int)((SCREEN_HEIGHT/SCREEN_WIDTH)*100) == 216)?YES:NO)
        1cdb19c230be:我想问下各位大佬 如果横屏状态下 咋整
        Lol刀妹:@Henrya iPhone出新,豪杰辈出
        Henrya:我用这招
      • 绘色:让大佬装了次逼,还没给解决问题,是最骚的:joy:
        Lol刀妹:是的,不过这个问题,确实没有真正的解决方法,他们任何人给的答案都只是在当前有效
      • 喜欢文学的工科男:程序猿的世界,我不懂😂
      • DevinZ:SCREEN_HEIGHT >= 812 到目前为止就都是iphoneX系列了吧
        Jackie虎:@DevinZ 我就是这一招
        DevinZ:@无夜之星辰 let IPHONEX_SERIES = SCREEN_HEIGHT >= 812 ? true : false 哈哈 😂 估计能对付用一阵
        Lol刀妹:还有这招:joy: 可以,很强势
      • 波儿菜:使用设备型号判断可能好一些:
        + (BOOL)isIphoneX {
        static BOOL isIphoneX = NO;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
        NSSet *platformSet = [NSSet setWithObjects:@"iPhone10,3", @"iPhone10,6" @"iPhone11,8", @"iPhone11,2", @"iPhone11,4", @"iPhone11,6", nil];
        struct utsname systemInfo;
        uname(&systemInfo);
        NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
        if ([platform isEqualToString:@"x86_64"] || [platform isEqualToString:@"i386"])
        isIphoneX = YBIMAGEBROWSER_HEIGHT == 812;
        else
        isIphoneX = [platformSet containsObject:platform];
        });
        return isIphoneX;
        }
        ArchLL:@indulge_in NSProcessInfo.processInfo.environment[@"SIMULATOR_MODEL_IDENTIFIER"]; 可以通过这种方式获取模拟器的详细型号,如 iPhone11,6
        Lol刀妹:@indulge_in 可以,这招也OK
        波儿菜:如果是 x86_64 和 i386 表示模拟器就自己随便判断一下
      • CepheusSun:快师傅有没有试过如果隐藏了状态栏,这个值是多少:joy:
        Lol刀妹:重新试了下隐藏状态栏,发现隐藏了就是0了:sweat_smile:
        sinno:@无夜之星辰 @property(nonatomic,readonly) CGRect statusBarFrame __TVOS_PROHIBITED; // returns CGRectZero if the status bar is hidden
        CepheusSun:@无夜之星辰 谢谢快师傅的反馈

      本文标题:判断是否是iPhoneX系列机型

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