iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >适配iPhoneXS max和iPhoneX R的方法示例
  • 810
分享到

适配iPhoneXS max和iPhoneX R的方法示例

适配iPhoneXSmaxiPhoneXR 2022-06-01 22:06:02 810人浏览 泡泡鱼
摘要

18更新:经测试发现iOS12修改了非刘海屏safeArea的值! 拿iPhone6竖屏情况下为例ioS11中返回的safeAreainsets为(0,0,0,0);iOS12中返回

18更新:经测试发现iOS12修改了非刘海屏safeArea的值! 拿iPhone6竖屏情况下为例ioS11中返回的safeAreainsets为(0,0,0,0);iOS12中返回的safeAreaInsets为(20,0,0,0);是的这个top-20是状态栏。这里大家要注意下,不应该盲目使用safeAreaInsets,而是使用我下面类似的判断刘海屏的方法来区分刘海屏后再决定是否使用safeAreaInsets;

今年的三款新手机已经发布,加上Xcode10已经发布GM Seed版本,也可以使用模拟器对新机进行适配,所以赶紧开始吧!

三款手机的屏幕大小

图片官网地址

上面是像素单位,然后我们找到对应的倍数,换算成-点pt;

图片官网地址

最后得到:

iPhone XS 375812pt*

iPhone XR 414896pt*

iPhone X 414896pt*

总结一下,因为X已经都是陪过了XS基本上就是忽略不管了,而新出的XR和XS Max虽然屏幕像素不同(一个LCD屏幕一个OLED屏幕)所以一个2x一个3x最终得到的pt大小是一样的(这里可以看出苹果果然没白给你便宜)。加上iOS11开始引入了safeAreaInsets,如果之前使用了这个属性,我们几乎不需要对项目中的页面做调整,那么最后只剩下一部要做 添加两个尺寸的启动图。

添加启动图

为什么要添加启动图?

当我们在XR的模拟器直接跑之前的老项目(已经适配过iPhoneX),做如下打印,你会发现:

WTF?难道是Xcode10的bug?再试试XS Max我相信你会得到一样的结果。

这里解释下。你是否还记得iPhoneX刚出来的时候跑没有适配过的项目,会导致app打开屏幕上下各有几十像素的黑屏?原因是因为没有假如iPhoneX的启动页!同理我们需要先引入启动页。

图片官网地址

这是启动图尺寸,直接照着像素单位切图即可。

需要注意的是,当你的老项目用Xcode10打开后,打开Images.xcassets文件夹,再到LaunchImage文件夹下时,找不到以上两个新机型的占位框,最简单的办法就是右键添加一个新的LaunchImage,然后删除老的LaunchImage,记得新建的文件夹要改名LaunchImage哦。

新建的LaunchImage会出现两个新机型的占位框:

启动页添之后,再做打印,就会的到正确的屏幕尺寸了!

页面适配

由于从iOS11开始引入了safeAreaInsets这个应该是老话题了,所以这里稍微提供下我自己的心得吧。

页面是陪经常要写个中判断,代码中时常需要用到safeAreaInsets或者判断刘海屏等工具,所以我习惯在项目中写一个UIManager的单例,这里面除了提供一些适配需要的属性,还可以写一下tableView适配等。


@interface DDUIManager : NSObject

@property (nonatomic, assign, readonly) UIEdgeInsets safeAreaInset;

@property (nonatomic, assign, readonly) BOOL isHairHead;

+ (instancetype)sharedManager;

@end

@implementation DDUIManager

- (UIWindow *)keyWindow {
  return [UIApplication sharedApplication].keyWindow;
}

- (UIEdgeInsets)safeAreaInset {
  if (@available(iOS 11.0, *)) {
    if (self.keyWindow) {
      return self.keyWindow.safeAreaInsets;
    }
  }
  return UIEdgeInsetsZero;
}

- (BOOL)isHairHead {
  if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
    return self.safeAreaInset.left > 0.0f;
  }else {
    // ios12 非刘海屏状态栏 20.0f
    return self.safeAreaInset.top > 20.0f;
  }
}

@end

这样写除了使用方便以外,还避免了一部分关于系统的条件编译等,因为safeAreaInset是iOS11才出的.而且在e lse中会返回UIEdgeInsetsZero,使得使用时可以省去一些if-else语句,例如:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: 适配iPhoneXS max和iPhoneX R的方法示例

本文链接: https://www.lsjlt.com/news/30208.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Html5中IphoneX适配的示例分析
    小编给大家分享一下Html5中IphoneX适配的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!IphoneX 的适配,...
    99+
    2024-04-02
  • Html5适配iphoneX刘海屏的实现示例
    这篇文章主要介绍了Html5适配iphoneX刘海屏的实现示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。iphonex的刘海屏且不说好看不好看,但是确实给开发造成一定困扰...
    99+
    2023-06-09
  • HTML5页面在iPhoneX适配问题的示例分析
    这篇文章将为大家详细讲解有关HTML5页面在iPhoneX适配问题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.  iPhoneX的介绍屏幕尺寸倍...
    99+
    2024-04-02
  • vue项目适配大屏端的方法示例
    浅析rem 首先rem是css单位,相比于px固定的像素单位,rem更加的灵活,还有现在也比较好的vm。如果从未了解过,可以先过过眼 rem自适应。CSS3的REM设置字体大小 ...
    99+
    2024-04-02
  • vue大屏展示适配的方法
    本文实例为大家分享了vue大屏展示适配的具体代码,供大家参考,具体内容如下 1.utils文件夹建一个文件cv以下代码 export function useIndex (app...
    99+
    2024-04-02
  • VisualStudio2019配置OpenCV4.5.0的方法示例
    一、下载安装OpenCV4.5.0 1、进入opencv官网 2、点击Release进入Release界面,选择Windows版本 3、读秒完成即可开始下载,建议使用迅雷...
    99+
    2024-04-02
  • R语言实现随机森林的方法示例
    目录随机森林算法介绍算法介绍:决策树生长步骤:投票过程:基本思想:随机森林的优点:缺点R语言实现随机森林模型搭建1:randomForest()函数用于构建随机森林模型2:impor...
    99+
    2024-04-02
  • R语言最简单的向量赋值方法示例
    1. 生成等差数列的向量x x <- 1:10 #将x向量赋值为1 2 3 4 5 6 7 8 9 10 结果为 > x  [1]  1&n...
    99+
    2024-04-02
  • R语言中向量加法和乘法运算的示例分析
    这篇文章给大家分享的是有关R语言中向量加法和乘法运算的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在R语言中,不同长度的向量也是可以相加和相乘的,乘法的规则和加法类似1,相同长度的向量相加>&nb...
    99+
    2023-06-14
  • Java实现可配置换肤的方法示例
    目录接口设计数据库设计逻辑代码实体类jpacontroller返回示例最后夏天来了,是不是要给App换个夏天主题的皮肤呢?但是夏天过去后再换回默认皮肤难道还需要再重新发版么。不需要的...
    99+
    2024-04-02
  • JavaScript基础之静态方法和实例方法的示例分析
    小编给大家分享一下JavaScript基础之静态方法和实例方法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!直接定义在...
    99+
    2024-04-02
  • vue中实例方法和数据的示例分析
    小编给大家分享一下vue中实例方法和数据的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.vm.$set问题描述:如何...
    99+
    2024-04-02
  • canvas绘图按照contain或者cover方式适配并居中显示的示例分析
    小编给大家分享一下canvas绘图按照contain或者cover方式适配并居中显示的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!canvas绘图时dr...
    99+
    2023-06-09
  • idea快速生成代码配置的方法示例
    前言 这里是用的goland idea,实际上这个idea和 intellij idea的配置是一样的,并没有太大区别, 开整 1、进入 File->settings->...
    99+
    2024-04-02
  • C语言实现括号配对的方法示例
    本文主要介绍了C语言实现括号配对的方法示例,分享给大家,具体如下: 代码如下: #include<stdio.h> #include<string.h> ...
    99+
    2024-04-02
  • IDEA2020.3.2版本自动注释类和方法注释模板配置的示例
    小编给大家分享一下IDEA2020.3.2版本自动注释类和方法注释模板配置的示例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!想来大家在学习或者开发的环境下经常要自己注解类和方法吧;下面我来为大家讲解怎么创建自己的注解模板...
    99+
    2023-06-14
  • Python脚本读取Consul配置信息的方法示例
    先来说一下背景,为什么要写脚本去读Consul的配置信息呢?Consul是啥呢?consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。目前公司用的是这个东...
    99+
    2024-04-02
  • Vue3axios配置以及cookie的使用方法实例演示
    调用验证码方法 在Request.js也就是axios中添加切换验证码方法 // 请求后拦截 instants.interceptors.response.use( ...
    99+
    2023-02-18
    Vue3 axios配置方法 Vue3 cookie使用方法 Vue3 cookie使用实例
  • R语言统计结果输出至本地文件的几种方法示例
    1.sink() 在代码开始前加一行:sink(“output.txt”),就会自动把结果全部输出到工作文件夹下的output.txt文本文档。这时在R控制台的输出窗口中是看不到输出...
    99+
    2024-04-02
  • R语言中数据表匹配和拼接merge函数的使用方法
    小编给大家分享一下R语言中数据表匹配和拼接merge函数的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!R中的merge函数类似于Excel中的Vlook...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作