用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 查看内容

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

Rolan 2017-11-30 00:22

随着第二三批iPhone X的陆续到货,身边的土豪们纷纷用了起来,因为iPhoneX的齐刘海导致的适配问题很多,所以这群土豪更沉浸在各种找bug中,不出所料,豌豆公主小程序在一些地方也出现了一丢丢体验不好的地方,主要是 ...

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

是bug就得修,是体验问题就得优化,于是立马搞了一台iPhone X开始研究。 
网页端的适配还好,有viewport meta标签以及下面的方案进行处理。具体可参看这里

  1. {
  2. position: fixed;
  3. bottom: 0;
  4. width: 100%;
  5. height: constant(safe-area-inset-bottom);
  6. background-color: #fff;
  7. }

但比较尴尬了,从四个角被裁掉的表现上可以推测小程序里的viewport-fit默认为cover(根据表现猜测),但是没有接口去更改,所以网页端通过viewport-fix=cover结合constant(safe-area-inset-bottom);的适配方案不适合小程序。目前也没有看到小程序有对iPhoneX等异形屏有特殊的接口或字段。

小程序本身的底部tab栏对iPhoneX的适配也只是简单的加了一个白色底栏,提高了原有tab栏的位置,为什么这么说呢?因为这一点可以从我们购物车页面看出,购物车页吸底操作并非通过position:fixed;bottom:0;实现的,而是根据windowHeight-自身高度计算top值,从而模拟的吸底,在小程序新版本自身适配iPhoneX后,导致购物车底部按钮被盖住了一半,由此得出上面的结论(此处同为猜测)。

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

  1. wx.getSystemInfo({
  2. success: function(res) {
  3. console.log(res.model)
  4. console.log(res.pixelRatio)
  5. console.log(res.windowWidth)
  6. console.log(res.windowHeight)
  7. console.log(res.language)
  8. console.log(res.version)
  9. console.log(res.platform)
  10. }
  11. })

其中model便是设备的型号等信息,如果model中包含iPhoneX,便可认为该设备为iPhoneX,我们在入口文件app.js中去进行检测,然在全局增加一个isIpx字段,将结果赋予isIpx。在子页面中可以读取该值,举个商品详情页的栗子:

  1. <!-- goods.wxml -->
  2. <view class="button-group {{isIpx?'fix-iphonex-button':''}}">这是一个吸底按钮区域</view>// goods.js
  3. let app = getApp();
  4. Page({
  5. data: {
  6. isIpx: app.globalData.isIpx?true:false
  7. }
  8. })/* app.wxss */
  9. .fix-iphonex-button {
  10. bottom:68rpx!important;
  11. }
  12. .fix-iphonex-button::after {
  13. content: ' ';
  14. position: fixed;
  15. bottom: 0!important;
  16. height: 68rpx!important;
  17. width: 100%;
  18. background: #fff;
  19. }

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

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

鲜花
鲜花 (2)
鸡蛋
鸡蛋

刚表态过的朋友 (2 人)

分享至 : QQ空间
收藏
原作者: 壮壮壮 来自: 掘金

相关阅读