# 开发 \| 小程序中吸底按钮适配 iPhone X 方案

- 作者：知晓程序
- 发布时间：2017-12-22 20:00
- 原文：https://www.ifanr.com/minapp/958218

![](https://s3.ifanr.com/wp-content/uploads/2017/07/minapp-dev-final-feature.jpg)

文 \| 张少壮 @ 豌豆公主前端工程师

随着第二、三批 iPhone X 的陆续到货，身边的土豪们纷纷用了起来。又因为 iPhone X 的齐刘海导致的适配问题很多，所以这群土豪更沉浸在各种找 bug 中。

不出所料，「豌豆公主」小程序在一些地方也出现了一丢丢体验不好的地方。首当其冲的，是商品详情页和购物车的吸底按钮栏，会与 Home Indicator 横条（俗称「小白条」）重叠，这样在点击下方按钮时很容易误触发手势操作。

![](https://s3.ifanr.com/wp-content/uploads/2017/12/160023cc11e2be06.png)

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

网页端的适配还好，有 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 后，导致购物车底部按钮被盖住了一半，由此得出上面的结论（当然，此处为猜测）。

言归正传，既然没有特殊的方案获取该值，我们只能通过 wx.getSystemInfo 接口取获取设备信息，该接口使用方法如下：

```
wx.getSystemInfo({
  success: function(res) {
   console.log(res.model)
  }
})
```

其中，`res.model` 便是设备的型号等信息，如果 `model` 中包含 `iPhone X` 字样，便可认为该设备为 iPhone X。我们在 `app.js` 中进行检测，然在全局增加一个 `isIpx` 字段，用于判断机型。

在子页面中可以读取该值，举个商品详情页的栗子：

```
<!-- 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 底部圆角的方案就完成了。

至于为什么是 68 rpx，因为 iPhone X 的屏幕宽度和 iPhone 6 一样，都是 375 pt，但高度要比 iPhone 6 高了 145 pt。而小程序中 750 rpx = 375 pt = 750 物理像素，换算一下，就可以得出这个结论了。

最最后，iPhone X 壕可以扫描下面小程序码进行体验，欢迎拍砖指正~

![](https://s3.ifanr.com/wp-content/uploads/2017/12/nqmqlus7ll079mn4q7nf621p0aajf0j2.png)

「豌豆公主」小程序使用链接  
<https://minapp.com/miniapp/5112/>

原文地址：  
https://juejin.im/post/5a1d396551882546d71f157b

**关注「知晓程序」公众号，在微信后台回复「开发」，让你的小程序性能再上一层楼。**

**![](https://s3.ifanr.com/wp-content/uploads/2017/11/20171101173458.jpg)**

![](https://s3.ifanr.com/wp-content/uploads/2017/09/bottomqrcode.gif)
