微信小程序适配iPhone X主要针对fix定位到底部的区域,好比详情页或购物车底部的按钮栏,会与iPhone X的Home Indicator
横条重叠,这样在点击下方按钮时很容易误触发手势操做,以下图:
javascript
/** * 获取设备信息 * @returns {Promise<any>} */ export function wechatGetSystemInfo () { return new Promise((resolve, reject) => { wx.getSystemInfo({ success: (res) => { resolve(res) }, fail: (err) => { reject(err) } }) }) }
.view-fix-iphonex { bottom: ~'60rpx' !important; } .view-fix-iphonex::after { content: ' '; position: fixed; bottom: 0 !important; height: ~'60rpx' !important; width: 100%; background: #fff; }
isIpx
存在vuex中,在小程序初始化完成时判断在 App.vue
中处理css
<script> import wx from 'wx' import { mapGetters, mapActions } from 'vuex' import { wechatGetSystemInfo } from './utils/weappUtils' export default { onLaunch () { this.isIphoneX() }, computed: { ...mapGetters(['isIpx']) }, methods: { //判断设备是不是iphoneX isIphoneX() { wechatGetSystemInfo().then(res => { const deviceModel = 'iPhone X' let isIpx = false if (res.model.indexOf(deviceModel) > -1) { isIpx = true } if (this.isIpx !== isIpx) { this.setIsIpx(isIpx) } }).catch(err => {}) }, ...mapActions(['setIsIpx']) } } </script>
如在 demo.vue
中处理vue
<template> <div class="fix-view" :class="isIpx?'view-fix-iphonex':''" > 吸附在底部的区域 </div> </template> <script> import wx from 'wx' import {mapGetters} from 'vuex' export default { computed: { ...mapGetters(['isIpx']) }, } </script> <style lang="less"> .fix-view { position: fixed; left: 0; right: 0; bottom: 0; height: ~'100rpx'; line-height: ~'100rpx'; box-sizing: border-box; text-align: right; display: flex; justify-content: end; background: #fff; } </style>