当前位置: 首页 > 科技观察

微信小程序适配iPhoneX总结

时间:2023-03-16 13:13:08 科技观察

本文主要介绍我们知识收集小程序在适配iPhoneX屏幕时遇到的一些问题和总结。希望对大家的小程序开发有所帮助。去年9月iPhoneX屏幕数据正式发布后,引发了一波iOSApp适配iPhoneX的热潮和技术文章。这里简单总结一下iPhoneX屏幕的基本数据,方便后续在小程序开发中进行适配。屏幕尺寸:5.8英寸(对角线)屏幕物理分辨率:1125px×2436px,458ppi实际开发适配尺寸:375pt×812pt,@3x另外,由于iPhone顶部状态栏区域的“Qi缺口”X屏幕,并且在屏幕底部增加了“操作栏”,如下图所示,所以我们在开发的时候需要注意安全区域的问题。根据苹果官方文档,iPhoneX顶部状态栏的自适应安全区域高度为44pt,底部操作栏区域高度为34pt。此外,在iPhoneX中,部分系统Bars的默认高度相比之前的设备也发生了变化,如下表所示。因此在iOSApp开发中,如果我们使用系统默认的UINavigationController和UITabBarController,不需要额外的适配工作,iOS系统会自动适配相关Bar的安全区域。如果我们使用自定义的导航栏和标签栏,需要注意根据设备类型设置这些栏的不同高度。小程序的尺寸单位为了解决不同屏幕尺寸的适配问题,小程序设置了一个尺寸单位:rpx(responsivepixel),可以根据屏幕宽度进行自适应。小程序规定所有设备的屏幕宽度为750rpx,1rpx所代表的实际像素值根据设备的实际屏幕宽度而有所不同。根据微信开发文档,在4.7英寸的iPhone设备(iPhone6/7/8)上,屏幕宽度为375px(这里应该理解为375点),总共有750个物理像素,那么750rpx=375px=750个物理像素,1rpx=0.5px=1个物理像素。小程序中如何判断设备为iPhoneX以上我们简单介绍了iPhoneX的屏幕数据和小程序中的尺寸单位,作为铺垫。现在我们终于进入正题了。在小程序中适配iPhoneX屏幕,我们首先需要知道如何判断设备类型。微信小程序API提供了wx.getSystemInfo(OBJECT)方法获取用户手机的系统信息和设备信息,包括以下数据:以上各字段含义请参考文档,我们不再一一赘述。因此,我们可以根据该方法返回的手机型号字段model是否包含iPhoneX字符串,或者screenHeight的高度是否等于812来判断设备是否为iPhoneX。注意:这里有个小坑需要注意。如果微信开发者工具中的模拟器选择的是iPhoneX,此时获取到的型号值为iPhoneX,导致我以为真机也是同样的值,所以直接用if(model=='iPhoneX')来判断,但实际上真机下model的值是这样的格式:iPhoneX(GSM+CDMA),所以我们需要使用字符串搜索匹配来判断。综上所述,我们可以在app.js的globalData中增加一个字段isIPX来识别当前设备是否为iPhoneX,然后在小程序启动时调用onLaunch中的wx.getSystemInfo(OBJECT)方法,在其中读取successcallback分析model字段,代码大致如下:app({//全局数据globalData:{//其他数据定义...isIPX:false,//当前设备是否为iPhoneX},//小程序启动入口onLaunch:function(options){//其他启动代码...//判断设备是否为iPhoneXthis.checkIsIPhoneX()},checkIsIPhoneX:function(){constself=thiswx.getSystemInfo({success:function(res){//根据机型判断if(res.model.search('iPhoneX')!=-1){self.globalData.isIPX=true}//或根据screenHeight判断//if(res.screenHeight==812){//self.globalData.isIPX=true//}}})},}如果需要在小程序启动时立即获取设备相关信息,也可以调用wx.getSystemInfoSync()方法,该方法将获得数据同步nously并立即返回。实际的页面适配在小程序页面开发中,需要适配iPhoneX的地方主要有:导航栏(NavigationBar)、标签栏(TabBar)和底部的吸盘按钮页面的。导航栏和标签栏的适配如果我们使用微信小程序官方组件开发,没有自定义,在app.json文件中设置tabBar页面,window的navigationStyle值为默认,那么我们不需要修改导航在iPhoneX中Bar和tabbar适配,微信会自动帮我们适配,下图是知识采集小程序首页:但是如果我们自定义导航栏(在app.json中设置窗??口的navigationStylefiletocustom,此时只保留右上角的胶囊状按钮,需要开发者自行绘制导航栏样式)和标签栏。然后我们需要判断每个页面中的设备类型,并在iPhoneX屏幕的安全区域进行布局,并修改关联Bar的高度值(见上表)。以自定义导航栏适配为例,步骤如下:(1)首先在每个页面的page.js中读取app.js中的isIPX值,如下:constapp=getApp()Page({data:{//页面其他数据...isIPX:app.globalData.isIPX,},//其他代码}(2)然后为页面中的一个视图View写两个样式.wxss样式文件,分别为普通屏和iPhoneXscreen,如下:.navi-bar-view{height:64px;/*其他样式值*/}.navi-bar-view-IPX{height:88px;/*其他样式值*/}(3)***在page.wxml页面结构布局中,根据isIPX的值给View设置不同的class样式,如下:另外,对于自定义的导航栏和标签栏,我建议遵循iPhoneUI的设计规范。风格可以参考苹果官方的渲染图:底部按钮适配小程序页面,底部按钮是一个很常见的设计,我们一般会把一些重要的按钮放在页面底部要浮动,比如我们知识宝典小程序“小收藏详情页”底部的“收藏”和“转发”按钮:在iPhoneX中,我们需要将底部按钮向上偏移34像素,这可以通过在CSS样式中将padding-bottom设置为34px来实现。参考代码如下:.feed-bottom-view{width:100%;height:48px;/*吸底按钮的高度*/bottom:0;opacity:0.95;position:fixed;border-top-style:solid;border-top-width:0.5px;/*分割线的高度*/border-color:lightgrey;background-color:#F8F8F8;}.feed-bottom-view-IPX{/*iPhoneX内容向上偏移34px*/padding-bottom:34px;备注:如As前面提到,对于不同的设备宽度,1rpx所代表的实际像素值也是不同的,而在不同尺寸(3.5/4.0/4.7/5.5英寸)的iPhone设备中,虽然它们的宽度不同,但导航栏+的高度状态栏为64pt(iPhoneX为88pt),标签栏TabBar的高度为49pt(iPhoneX为83pt)。因此,在小程序开发中,当我们需要自定义导航栏、标签栏或适配iPhoneX上下安全区时,我建议这里的单位直接使用px(对应小程序中iOS开发中的点pt),而不是rpx(当然尺寸还是建议使用rpx页面其他元素的描述),以确保最终渲染显示的高度与iOS系统默认高度一致。总结本文章简单介绍了小程序开发中如何适配iPhoneX屏幕。更详细的可以参考我们在GitHub上的开源知识收集小程序的代码:awesome-tips-wx-app