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>  
 |  
  |