2019独角兽企业重金招聘Python工程师标准>>>

截止目前,苹果所有刘海系列的设备屏幕数据如下:

  • iPhone X 、iPhone XS: 5.8英寸, 375pt * 812pt(@3x),启动图1125px * 2436px
  • iPhone XR: 6.1英寸, 414pt * 896pt(@2x),启动图828px * 1792px
  • iPhone XS Max: 6.5英寸, 414pt * 896pt(@3x),启动图1242px * 2688px

该系列设备导航栏高度88(64), 状态栏高度44(20), tabbar高度83(49), 其中括号中的为非刘海系列的高度。

对于未进行新设备屏幕尺寸适配的工程,在新设备iPhone XS Max和iPhone XR上运行, 它们是以放大模式自动适配的(以iPhone X为基准等比例放大),此时在代码中获取的屏幕高度都是375pt * 812pt。

针对这种情况,需要配置Assets.xcassets 里的 LaunchImage,新增两种828px * 1792px1242px * 2688px启动图即可。

对于比较新的以LaunchScreen.stroyboard为启动页的,据说是直接重新编译工程即可。

最后,对于刘海屏幕的判断,项目中使用了两种方式:

  1. 根据屏幕宽高进行判断:

    这是RN中用来判断的代码,使用nativeBounds是由于它是一个跟屏幕朝向无关的数据,值恒等于屏幕portrait-up方向时的宽高。

    static BOOL RCTIsIPhoneX() {static BOOL isIPhoneX = NO;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{CGSize screenSize = [UIScreen mainScreen].nativeBounds.size;CGSize iPhoneXScreenSize = CGSizeMake(1125, 2436);CGSize iPhoneXMaxScreenSize = CGSizeMake(1242, 2688);CGSize iPhoneXRScreenSize = CGSizeMake(828, 1792);isIPhoneX =CGSizeEqualToSize(screenSize, iPhoneXScreenSize) ||CGSizeEqualToSize(screenSize, iPhoneXMaxScreenSize) ||CGSizeEqualToSize(screenSize, iPhoneXRScreenSize);});return isIPhoneX;
    }
    
  2. 通过获取设备的device model来判断:

    每一台iOS设备都有对应的硬件编码/标识符,称为device model 或者叫machine name,代码如下

    + (NSString *)getMachine
    {//方法一:
    //    static const char MachineName[] = "hw.machine";
    //    NSString* result = nil;
    //    size_t size = 0;
    //    if (sysctlbyname(MachineName, NULL, &size, NULL, 0) || size == 0)
    //        return nil;
    //    char *machine = new char[size];
    //    if (sysctlbyname(MachineName, machine, &size, NULL, 0) == 0)
    //        result = [NSString stringWithUTF8String:machine];
    //    delete[] machine;
    //    return result;方法二:添加了对于模拟器的支持static NSString *model;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{#if TARGET_IPHONE_SIMULATOR
    #ifdef DEBUG// 获取模拟器所对应的 device modelmodel = NSProcessInfo.processInfo.environment[@"SIMULATOR_MODEL_IDENTIFIER"];
    #endif
    #else// 获取真机设备的 device modelstruct utsname systemInfo;uname(&systemInfo);model = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    #endif});return model;
    }
    

    到此我们就可以根据device model来判断是否是iPhone X了:

    + (bool) isIphoneX
    {NSString* model = [self getMachine];BOOL isiPhoneX = [model isEqualToString:@"iPhone10,3"] || [model isEqualToString:@"iPhone10,6"] || [model hasPrefix:@"iPhone11,"];return isiPhoneX;
    }
    

去年发布的第一代 iPhone X 对应的 device mode 为 iPhone10,3iPhone10,6,而今年最新发布 iPhone XS 对应 iPhone11,2,iPhone XS Max 对应 iPhone11,4iPhone11,6,iPhone XR 对应 iPhone11,8,完整的 device mode 数据参考这里:https://www.theiphonewiki.com/wiki/Models

另外对于各个屏幕的分辨率,可以参考这张图:

参考链接:

  • https://kangzubin.com/iphone-resolutions/

  • https://github.com/facebook/react-native/blob/master/React/Modules/RCTDeviceInfo.m

转载于:https://my.oschina.net/u/1473377/blog/2239955

iphone X系列设配屏幕适配相关推荐

  1. 苹果手机尺寸详细表及iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax、iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max、屏幕适配

    iPhone设备 物理分辨率是硬件所支持,逻辑分辨率是软件可以达到的.

  2. 苹果系统引导修复工具_苹果客服渠道回应 iPhone 12 系列屏幕 “发绿”情况:将在新系统中修复...

    新闻转自IT之家 远洋 IT之家 11 月 17 日消息IT之家昨天曾报道,近日有用户反映 iPhone 12 出现屏幕发绿的问题,具体来说,iPhone 12 在深灰色状态下会出现屏幕周围泛绿的情况 ...

  3. 贵!iPhone 11系列维修费用出炉 最高的可以入手一部华为P30 Pro了…

    苹果新一代智能手机iPhone 11系列已经正式发售.近日,苹果中国正式公布了iPhone 11全系列的维修费用,整体来说用一个字形容的话,那就是贵! 从苹果官方公布的数据显示,最新发布的三款新机售后 ...

  4. 不再是顶配专属iPhone 13系列将全系标配LiDAR激光雷达

    根据此前多方预测的消息,今年苹果将继续在9月推出全新的iPhone 13系列机型(也有消息称为iPhone 12s系列),按照往年惯例,今年的新iPhone的升级可能并不会太大,而最大的升级主要将集中 ...

  5. iPhone 12系列终于将配高刷屏:120Hz恐怕还得等两年

    随着发布时间的日益临近,关于iPhone 12系列的爆料已经深入到每一个细节.近日有外媒带来了该机在屏幕刷新率上的更多细节. 去年开始,高刷新率屏幕越来越成为各大手机厂商追求的目标,到现在这一卖点已广 ...

  6. iphone X 屏幕适配

    1.前言 就在今天(2017年09月13日 )凌晨,苹果发布了带刘海的 iPhone X,这个屏幕需要 iOS 开发者做新的适配,会后苹果发布了 iPhone X 的适配指南,我们将它翻译出来供大家参 ...

  7. 关于IOS的屏幕适配(iPhone)——资源适配

    IOS的屏幕适配几乎不需要大量的代码操作,更多的时间我们只是动动鼠标选择一下就搞定.可以苹果在这方面做的还是比较人性的,解放了开发者. 首先来说说Iphone这几种屏(由于最近做的是iPhone AP ...

  8. cocos2d 屏幕適配_Cocos2d-x 3.1 一步步做屏幕适配

    本文并不想讲关于屏幕适配的概念或者大道理,如果还不了解cocos2d-x屏幕适配的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/ ...

  9. iPhone 12系列详细屏幕参数前瞻:首批只有三星、LG屏幕 均为OLED面板

    6月已过去了大半,距离苹果全新的iPhone 12系列年度旗舰的秋季发布会又近了一步.综合当前比较可靠的消息,今年秋季苹果的年度旗舰iPhone 12系列将依旧提供iPhone 12.iPhone 1 ...

最新文章

  1. AI 不可以作为专利认证发明人,“因为它不是人”
  2. 钱海丰:农药污染下的土壤微生态响应与风险预测​(今晚7点半)
  3. 【转载】自然语言推理介绍
  4. 十分钟用Windows服务器简单搭建DHCP中继代理!!
  5. KeyMob移动广告聚合平台给予开发者服务!
  6. JAVA知识总结目录
  7. redis重启命令_这可能是你见过最全面的Redis主从复制原理
  8. 缓存系列之一:buffer、cache与浏览器缓存
  9. React开发(269):事件的绑定-addEventListener
  10. 程序员面试金典 - 面试题 08.10. 颜色填充(BFS/DFS)
  11. PhoneGap学习笔记(一) 框架搭建
  12. 阿诺德图像加密c语言,基于Arnold变换的数字图像加密算法
  13. 做好产品经理,需要具备哪些技能?
  14. delphi 获取当前路径
  15. 基于脉振高频电压信号注入法的PMSM无位置传感器控制原理和仿真
  16. 用VS新建多层架构时引用第三方dll 时清理解决方案时,放bin文件夹下的bll被清空问题
  17. 怎么更改苹果账户名称_是妥协吗?苹果iCloud终于支持安卓/iOS浏览器了
  18. 前端iPhone刘海屏适配
  19. fullscan mysql_[InnoDB系列] -- 实测ibbackup vs mysqldump
  20. 计算机游戏快速退出的快捷键,电脑玩游戏怎么快速切回桌面

热门文章

  1. Oracle CDC (Change Data Capture)更新数据捕获——概述
  2. C#调用win32 api程序实例
  3. Android_CodeWiki_01
  4. 2010年5月blog汇总:OpenExpressApp、其他
  5. iOS 不同机型屏幕适配
  6. swift 中跳转web view的两种方法
  7. 【spring boot2】第8篇:spring boot 中的 servlet 容器及如何使用war包部署
  8. break continue
  9. 第106天:Ajax中同步请求和异步请求
  10. linux小脚本批量添加/删除用户