diff --git a/example/pages/goods-action/index.wxml b/example/pages/goods-action/index.wxml index 322409da..4c71c0d2 100644 --- a/example/pages/goods-action/index.wxml +++ b/example/pages/goods-action/index.wxml @@ -1,5 +1,5 @@ <demo-block title="基础用法"> - <van-goods-action custom-class="goods-action"> + <van-goods-action custom-class="goods-action" safe-area-inset-bottom="{{ false }}"> <van-goods-action-icon icon="chat" text="客服" @@ -23,7 +23,7 @@ </demo-block> <demo-block title="图标提示"> - <van-goods-action custom-class="goods-action"> + <van-goods-action custom-class="goods-action" safe-area-inset-bottom="{{ false }}"> <van-goods-action-icon icon="chat" text="客服" /> <van-goods-action-icon icon="cart" text="购物车" info="5" /> <van-goods-action-icon icon="shop" text="店铺" /> diff --git a/example/pages/submit-bar/index.wxml b/example/pages/submit-bar/index.wxml index d9700da5..7547daa1 100644 --- a/example/pages/submit-bar/index.wxml +++ b/example/pages/submit-bar/index.wxml @@ -4,6 +4,7 @@ button-text="提交订单" bind:submit="onClickButton" custom-class="van-submit-bar" + safe-area-inset-bottom="{{ false }}" /> </demo-block> @@ -15,6 +16,7 @@ tip="您的收货地址不支持同城送, 我们已为您推荐快递" bind:submit="onClickButton" custom-class="van-submit-bar" + safe-area-inset-bottom="{{ false }}" /> </demo-block> @@ -25,6 +27,7 @@ button-text="提交订单" bind:submit="onClickButton" custom-class="van-submit-bar" + safe-area-inset-bottom="{{ false }}" /> </demo-block> @@ -35,6 +38,7 @@ bind:submit="onClickButton" custom-class="van-submit-bar" tip="{{ true }}" + safe-area-inset-bottom="{{ false }}" > <van-tag type="primary" custom-class="van-tag">标签</van-tag> <view slot="tip"> diff --git a/example/pages/tabbar/index.wxml b/example/pages/tabbar/index.wxml index ba7881f8..0d7f220a 100644 --- a/example/pages/tabbar/index.wxml +++ b/example/pages/tabbar/index.wxml @@ -1,5 +1,5 @@ <demo-block title="基础用法"> - <van-tabbar active="{{ active }}" custom-class="tabbar" bind:change="onChange"> + <van-tabbar active="{{ active }}" custom-class="tabbar" bind:change="onChange" safe-area-inset-bottom="{{ false }}"> <van-tabbar-item icon="shop">标签</van-tabbar-item> <van-tabbar-item icon="chat" dot>标签</van-tabbar-item> <van-tabbar-item icon="records" info="5">标签</van-tabbar-item> @@ -8,7 +8,7 @@ </demo-block> <demo-block title="自定义图标"> - <van-tabbar active="{{ active2 }}" custom-class="tabbar" bind:change="onChange"> + <van-tabbar active="{{ active2 }}" custom-class="tabbar" bind:change="onChange" safe-area-inset-bottom="{{ false }}"> <van-tabbar-item> <span>自定义</span> <image slot="icon" src="{{ icon.normal }}" class="icon" mode="aspectFit" /> diff --git a/packages/action-sheet/README.md b/packages/action-sheet/README.md index 7ee47182..aff2563f 100644 --- a/packages/action-sheet/README.md +++ b/packages/action-sheet/README.md @@ -88,6 +88,7 @@ Page({ | cancel-text | 取消按钮文字 | `String` | - | | overlay | 是否显示遮罩层 | `Boolean` | - | | close-on-click-overlay | 点击遮罩是否关闭菜单 | `Boolean` | - | +| safe-area-inset-bottom | 是否适配iPhoneX | `Boolean` | `true` | ### Event diff --git a/packages/action-sheet/index.ts b/packages/action-sheet/index.ts index e43735a1..a1acd00f 100644 --- a/packages/action-sheet/index.ts +++ b/packages/action-sheet/index.ts @@ -20,6 +20,10 @@ VantComponent({ closeOnClickOverlay: { type: Boolean, value: true + }, + safeAreaInsetBottom: { + type: Boolean, + value: true } }, diff --git a/packages/action-sheet/index.wxml b/packages/action-sheet/index.wxml index 5bfe879d..2435c5c1 100644 --- a/packages/action-sheet/index.wxml +++ b/packages/action-sheet/index.wxml @@ -4,6 +4,7 @@ z-index="{{ zIndex }}" overlay="{{ overlay }}" custom-class="van-action-sheet" + safe-area-inset-bottom="{{ safeAreaInsetBottom }}" close-on-click-overlay="{{ closeOnClickOverlay }}" bind:close="onClose" > diff --git a/packages/common/style/var.less b/packages/common/style/var.less index 26186edc..b313db8e 100644 --- a/packages/common/style/var.less +++ b/packages/common/style/var.less @@ -55,3 +55,6 @@ @toast-default-padding: 15px; @toast-default-width: 90px; @toast-default-min-height: 90px; + +// iPhoneX +@safe-area-inset-bottom: 34px; diff --git a/packages/goods-action/README.md b/packages/goods-action/README.md index 764eb596..0b27ecb6 100644 --- a/packages/goods-action/README.md +++ b/packages/goods-action/README.md @@ -64,6 +64,12 @@ Page({ </van-goods-action> ``` +### GoodsAction API + +| 参数 | 说明 | 类型 | 默认值 | +|-----------|-----------|-----------|-------------| +| safe-area-inset-bottom | 是否适配iPhoneX | `Boolean` | `true` | + ### GoodsActionIcon API | 参数 | 说明 | 类型 | 默认值 | diff --git a/packages/goods-action/index.less b/packages/goods-action/index.less index f9bfb4e7..63f2d2e3 100644 --- a/packages/goods-action/index.less +++ b/packages/goods-action/index.less @@ -1,9 +1,14 @@ @import '../common/style/var.less'; .van-goods-action { - left: 0; + position: fixed; right: 0; bottom: 0; + left: 0; display: flex; - position: fixed; + background-color: @white; + + &--safe { + padding-bottom: @safe-area-inset-bottom; + } } diff --git a/packages/goods-action/index.ts b/packages/goods-action/index.ts index 5d0c1360..4a9bf784 100644 --- a/packages/goods-action/index.ts +++ b/packages/goods-action/index.ts @@ -1,3 +1,19 @@ import { VantComponent } from '../common/component'; -VantComponent(); +VantComponent({ + props: { + safeAreaInsetBottom: { + type: Boolean, + value: true + } + }, + + computed: { + rootClass() { + const { safeAreaInsetBottom, isIPhoneX } = this.data; + return this.classNames('van-goods-action', 'custom-class', { + [`van-goods-action--safe`]: isIPhoneX && safeAreaInsetBottom + }); + } + } +}); diff --git a/packages/goods-action/index.wxml b/packages/goods-action/index.wxml index 831d1685..cfc009c7 100644 --- a/packages/goods-action/index.wxml +++ b/packages/goods-action/index.wxml @@ -1,3 +1,3 @@ -<view class="van-goods-action custom-class"> +<view class="{{ rootClass }}"> <slot /> </view> diff --git a/packages/mixins/basic.ts b/packages/mixins/basic.ts index 50ede2fc..11236f47 100644 --- a/packages/mixins/basic.ts +++ b/packages/mixins/basic.ts @@ -1,6 +1,21 @@ import { classNames } from '../common/class-names'; export const basic = Behavior({ + created() { + wx.getSystemInfo({ + success: ({ model, screenHeight }) => { + const isIphoneX = /iphone x/i.test(model); + const isIphoneNew = /iPhone11/i.test(model) && screenHeight === 812; + + if (isIphoneX || isIphoneNew) { + this.setData({ + isIPhoneX: true + }); + } + } + }); + }, + methods: { classNames, diff --git a/packages/popup/README.md b/packages/popup/README.md index 5f14b0f0..53e02a20 100644 --- a/packages/popup/README.md +++ b/packages/popup/README.md @@ -54,6 +54,7 @@ Page({ | custom-style | 自定义弹出层样式 | `String` | `` | | overlay-style | 自定义背景蒙层样式 | `String` | `` | | close-on-click-overlay | 点击蒙层是否关闭 Popup | `Boolean` | `true` | +| safe-area-inset-bottom | 是否适配iPhoneX | `Boolean` | `true` | ### Event diff --git a/packages/popup/index.less b/packages/popup/index.less index 9fece23f..d57465b2 100644 --- a/packages/popup/index.less +++ b/packages/popup/index.less @@ -44,6 +44,10 @@ bottom: auto; left: 0; } + + &--safe { + padding-bottom: @safe-area-inset-bottom; + } } @keyframes van-center-enter { diff --git a/packages/popup/index.ts b/packages/popup/index.ts index 3eafdaad..d100fe0b 100644 --- a/packages/popup/index.ts +++ b/packages/popup/index.ts @@ -23,6 +23,20 @@ VantComponent({ position: { type: String, value: 'center' + }, + safeAreaInsetBottom: { + type: Boolean, + value: true + } + }, + + computed: { + popupClass() { + const { position, safeAreaInsetBottom, isIPhoneX } = this.data; + return this.classNames('custom-class', 'van-popup', { + [`van-popup--${position}`]: position, + [`van-popup--safe`]: isIPhoneX && safeAreaInsetBottom && position === 'bottom' + }); } }, diff --git a/packages/popup/index.wxml b/packages/popup/index.wxml index 95c07bbd..07bd1ae1 100644 --- a/packages/popup/index.wxml +++ b/packages/popup/index.wxml @@ -8,7 +8,7 @@ /> <view wx:if="{{ inited }}" - class="custom-class van-popup {{ position ? 'van-popup--' + position : '' }}" + class="{{ popupClass }}" style="z-index: {{ zIndex }}; -webkit-animation: van-{{ transition || position }}-{{ type }} {{ duration }}ms both; animation: van-{{ transition || position }}-{{ type }} {{ duration }}ms both; {{ display ? '' : 'display: none;' }}{{ customStyle }}" bind:animationend="onAnimationEnd" > diff --git a/packages/submit-bar/README.md b/packages/submit-bar/README.md index 71e23129..869e0423 100644 --- a/packages/submit-bar/README.md +++ b/packages/submit-bar/README.md @@ -74,6 +74,7 @@ | disabled | 是否禁用按钮 | `Boolean` | `false` | | loading | 是否显示加载中的按钮 | `Boolean` | `false` | | currency | 货币符号 | `String` | `¥` | +| safe-area-inset-bottom | 是否适配iPhoneX | `Boolean` | `true` | ### Event diff --git a/packages/submit-bar/index.less b/packages/submit-bar/index.less index b692c372..10e1de0f 100644 --- a/packages/submit-bar/index.less +++ b/packages/submit-bar/index.less @@ -22,6 +22,10 @@ height: 50px; background-color: @white; font-size: 14px; + + &--safe { + padding-bottom: @safe-area-inset-bottom; + } } &__text { diff --git a/packages/submit-bar/index.ts b/packages/submit-bar/index.ts index 55bbeff0..8cf54459 100644 --- a/packages/submit-bar/index.ts +++ b/packages/submit-bar/index.ts @@ -22,6 +22,10 @@ VantComponent({ buttonType: { type: String, value: 'danger' + }, + safeAreaInsetBottom: { + type: Boolean, + value: true } }, @@ -37,6 +41,13 @@ VantComponent({ tipStr() { const { tip } = this.data; return typeof tip === 'string' ? tip : ''; + }, + + barClass() { + const { isIPhoneX, safeAreaInsetBottom } = this.data; + return this.classNames('van-submit-bar__bar', 'bar-class', { + 'van-submit-bar__bar--safe': safeAreaInsetBottom && isIPhoneX + }); } }, diff --git a/packages/submit-bar/index.wxml b/packages/submit-bar/index.wxml index 53ae8335..a2bc998d 100644 --- a/packages/submit-bar/index.wxml +++ b/packages/submit-bar/index.wxml @@ -5,7 +5,7 @@ {{ tipStr }}<slot name="tip" /> </view> - <view class="van-submit-bar__bar bar-class"> + <view class="{{ barClass }}"> <slot /> <view class="van-submit-bar__text"> <block wx:if="{{ hasPrice }}"> diff --git a/packages/tabbar/README.md b/packages/tabbar/README.md index d8547f5b..75851724 100644 --- a/packages/tabbar/README.md +++ b/packages/tabbar/README.md @@ -75,6 +75,7 @@ Page({ | active | 当前选中标签的索引 | `Number` | - | | fixed | 是否固定在底部 | `Boolean` | `true` | | z-index | 元素 z-index | `Number` | `1` | +| safe-area-inset-bottom | 是否适配iPhoneX | `Boolean` | `true` | ### Tabbar Event diff --git a/packages/tabbar/index.less b/packages/tabbar/index.less index 3fd7e4fc..c94aeb91 100644 --- a/packages/tabbar/index.less +++ b/packages/tabbar/index.less @@ -1,14 +1,18 @@ @import '../common/style/var.less'; .van-tabbar { + display: flex; width: 100%; height: 50px; - display: flex; background-color: @white; &--fixed { - left: 0; - bottom: 0; position: fixed; + bottom: 0; + left: 0; + } + + &--safe { + padding-bottom: @safe-area-inset-bottom; } } diff --git a/packages/tabbar/index.ts b/packages/tabbar/index.ts index bc44e527..065395c2 100644 --- a/packages/tabbar/index.ts +++ b/packages/tabbar/index.ts @@ -27,6 +27,10 @@ VantComponent({ zIndex: { type: Number, value: 1 + }, + safeAreaInsetBottom: { + type: Boolean, + value: true } }, @@ -35,6 +39,16 @@ VantComponent({ currentActive: -1 }, + computed: { + tabbarClass() { + const { fixed, isIPhoneX, safeAreaInsetBottom } = this.data; + return this.classNames('custom-class', 'van-tabbar', 'van-hairline--top-bottom', { + 'van-tabbar--fixed': fixed, + 'van-tabbar--safe': isIPhoneX && safeAreaInsetBottom + }); + } + }, + watch: { active(active) { this.setData({ currentActive: active }); diff --git a/packages/tabbar/index.wxml b/packages/tabbar/index.wxml index 76b1b46b..b8eb8e47 100644 --- a/packages/tabbar/index.wxml +++ b/packages/tabbar/index.wxml @@ -1,5 +1,5 @@ <view - class="custom-class van-tabbar van-hairline--top-bottom {{ fixed ? 'van-tabbar--fixed' : '' }}" + class="{{ tabbarClass }}" style="{{ zIndex ? 'z-index: ' + zIndex : '' }}" > <slot />