u-safe-bottom.vue 1.37 KB
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
<template>
<view
class="u-safe-bottom"
:style="[style]"
:class="[!isNvue && 'u-safe-area-inset-bottom']"
>
</view>
</template>

<script>
import props from "./props.js";
/**
* SafeBottom 底部安全区
* @description 这个适配,主要是针对IPhone X等一些底部带指示条的机型,指示条的操作区域与页面底部存在重合,容易导致用户误操作,因此我们需要针对这些机型进行底部安全区适配。
* @tutorial https://www.uviewui.com/components/safeAreaInset.html
* @property {type} prop_name
* @property {Object} customStyle 定义需要用到的外部样式
*
* @event {Function()}
* @example <u-status-bar></u-status-bar>
*/
export default {
name: "u-safe-bottom",
mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
data() {
return {
safeAreaBottomHeight: 0,
isNvue: false,
};
},
computed: {
style() {
const style = {};
// #ifdef APP-NVUE
// nvue下,高度使用js计算填充
style.height = uni.$u.addUnit(uni.$u.sys().safeAreaInsets.bottom, 'px');
// #endif
return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
},
},
mounted() {
// #ifdef APP-NVUE
// 标识为是否nvue
this.isNvue = true;
// #endif
},
};
</script>

<style lang="scss" scoped>
.u-safe-bottom {
/* #ifndef APP-NVUE */
width: 100%;
/* #endif */
}
</style>