uni-app打包h5页面ios唤起软键盘踩坑

问题:页面有很多input框,上面的input输入框,当虚拟键盘出来时没问题,但是下面的input输入框,就会出现问题,input输入框会跑到键盘后面。

 

网上一阵百度,找到原因:安卓手机中唤起软键盘时页面会压缩webview的高度,窗口会执行resize事件,但ios并不会。网上各种百度,尝试,都失败了,在快放弃时,找到一个可行的。直接贴代码:

 1 <template>
 2     <view class="wrapper" id="wrapper" ref="wrapper">
 3         <scroll-view  
 4             :style="{'height': scrollHeight}"
 5             class="scroll-view"
 6             :scroll-y="true">
 7             <view class="evaluate-type-list">
 8                 <view 
 9                     class="evaluate-type-item" 
10                     v-for="(item, index) in options" 
11                     :key="index">
12                     <view class="item-top">
13                         <view class="title">
14                             {{item.title}} 
15                             <text class="score">({{item.score}})</text>
16                         </view>
17                         <view class="content">{{item.content}}</view>
18                     </view>
19                     <view class="item-bottom"> 
20                         <view class="content">
21                             评价
22                             <input 
23                                 v-model.number="item.evaluateScore"
24                                 class="input" 
25                                 type="number" 
26                                 placeholder="请输入评价分数" 
27                                 @input="checkScore(item)"
28                                 @focus="focusInput"
29                                 @blur="blurInput"
30                                 placeholder-style='color: #d1d1d1' />
31                         </view>
32                         <view class="err-tip" v-if="item.isErr">{{item.errTip}}</view>
33                     </view>
34                 </view>
35             </view>
36             <button class="btn-submit" @tap="submit">确定</button>
37         </scroll-view>
38     </view>
39 </template>
40 
41 <script>
42     export default {
43         data() {
44             return {
45                 scrollHeight: 'calc(100vh - 20upx)',
46             }
47         },
48         methods: {
49             focusInput() {
50                 // 获取系统信息
51                 let info = uni.getSystemInfoSync();
52                 if(info.platform === 'ios') {
53                     setTimeout(() => {
54                         let viewInfo = this.$refs.wrapper.$el.getBoundingClientRect();
55                         // 获取视图偏移量,重新定位操作栏
56                         this.bottomVal = Math.abs(parseFloat(viewInfo.top))
57                         // 重置编辑区高度
58                         this.scrollHeight =  `calc(100vh - ${98 + this.bottomVal}px )`
59                     }, 500)
60                 }
61             },
62             blurInput() {
63                 this.scrollHeight = 'calc(100vh - 180upx)';
64             },
65             
66         }
67     }
68 </script>
69 
70 <style lang="scss" scoped>
71 </style>

终于解决困扰一个星期的问题。如果对你有帮助,请给个赞,谢谢!

 

posted @ 2022-01-07 09:05  鼓舞飞扬  阅读(1346)  评论(0编辑  收藏  举报