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