小程序中吸底按钮适配 iPhone X 方案

随着第二三批iPhone X的陆续到货,身边的土豪们纷纷用了起来,由于iPhone X的齐刘海致使的适配问题不少,因此这群土豪更沉浸在各类找bug中,不出所料,豌豆公主小程序在一些地方也出现了一丢丢体验很差的地方,主要是商品详情页和购物车的吸底按钮栏,会与Home Indicator横条重叠,这样在点击下方按钮时很容易误触发手势操做,以下图:
小程序

截图来自网络,侵删
截图来自网络,侵删

是bug就得修,是体验问题就得优化,因而立马搞了一台iPhone X开始研究。bash

网页端的适配还好,有viewport meta标签以及下面的方案进行处理。具体可参看这里网络

{
  position: fixed;
  bottom: 0;
  width: 100%;
  height: constant(safe-area-inset-bottom);
  background-color: #fff;
}复制代码

但比较尴尬了,从四个角被裁掉的表现上能够推测小程序里的viewport-fit默认为cover(根据表现猜想),可是没有接口去更改,因此网页端经过viewport-fix=cover结合constant(safe-area-inset-bottom);的适配方案不适合小程序。目前也没有看到小程序有对iPhone X等异形屏有特殊的接口或字段。小程序自己的底部tab栏对iPhone X的适配也只是简单的加了一个白色底栏,提升了原有tab栏的位置,为何这么说呢?由于这一点能够从咱们购物车页面看出,购物车页吸底操做并不是经过position:fixed;bottom:0;实现的,而是根据windowHeight-自身高度计算top值,从而模拟的吸底,在小程序新版本自身适配iPhone X后,致使购物车底部按钮被盖住了一半,由此得出上面的结论(此处同为猜想)。app

言归正传,既然没有特殊的方案获取该值,咱们只能经过wx.getSystemInfo接口取获取设备信息,该接口使用方法以下:iphone

wx.getSystemInfo({
  success: function(res) {
    console.log(res.model)
    console.log(res.pixelRatio)
    console.log(res.windowWidth)
    console.log(res.windowHeight)
    console.log(res.language)
    console.log(res.version)
    console.log(res.platform)
  }
})复制代码

其中model即是设备的型号等信息,若是model中包含iPhone X,即可认为该设备为iPhone X,咱们在入口文件app.js中去进行检测,然在全局增长一个isIpx字段,将结果赋予isIpxxss

在子页面中能够读取该值,举个商品详情页的栗子:post

<!-- goods.wxml -->

<view class="button-group {{isIpx?'fix-iphonex-button':''}}">这是一个吸底按钮区域</view>复制代码
// goods.js
let app = getApp();
Page({
    data: {
        isIpx: app.globalData.isIpx?true:false
    }
})复制代码
/* app.wxss */
.fix-iphonex-button {
    bottom:68rpx!important;
}
.fix-iphonex-button::after {
    content: ' ';
    position: fixed;
    bottom: 0!important;
    height: 68rpx!important;
    width: 100%;
    background: #fff;
}复制代码

因而,一个简单的适配iPhone X底部圆角的方案就完成了。
至于为何采用68rpx,由于iPhone X和iPhone 6的屏幕宽度都是375px,小程序中750rpx = 375px = 750物理像素,结合下面两图能解释缘由:优化

截图来自网络,侵删
截图来自网络,侵删

截图来自网络,侵删
截图来自网络,侵删

最最后,iPhone X壕能够扫描下面小程序码进行体验,欢迎拍砖指正~~~
ui

豌豆公主小程序码
豌豆公主小程序码

最最最后,上周在组内进行了一次小程序的分享,已整理成文章,感兴趣的请移步这里这里这里spa

相关文章
相关标签/搜索