uni-app <textarea>组件首次聚焦时被键盘遮挡问题 必现 后面不会再出现
uni-app <textarea>组件首次聚焦时被键盘遮挡问题 必现 后面不会再出现
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | macOS Sonoma 14.3.1 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
HBuilderX类型:正式
HBuilderX版本号:3.99
手机系统:Android
手机系统版本号:Android 14
手机厂商:华为
手机机型:Mate 50
页面类型:vue
vue版本:vue2
打包方式:云端
App下载地址或H5网址:[应用市场下载 邮你采 或者 微信小程序搜索 邮你采](//ask.dcloud.net.cn/应用市场下载 邮你采 或者 微信小程序搜索 邮你采)
示例代码:
<textarea v-model="inputText" :adjust-position="true" :cursor-spacing="20" confirm-type="send" :confirm-hold="true" :maxlength="300" placeholder-class="input-placeholder" id="editor" class="message-input-area" :placeholder="props.placeholder" auto-blur [@confirm](/user/confirm)="handleSendMessage" [@input](/user/input)="onInput" [@focus](/user/focus)="onFocus" ref="inputRef" auto-height
hold-keyboard style="width: 100%;" />
没有解决吗?
没有
在 uni-app
中,使用 <textarea>
组件时,首次聚焦时可能会遇到键盘遮挡输入框的问题。这是因为在首次聚焦时,页面布局可能还没有完全适应键盘的弹出,导致输入框被键盘遮挡。而后续聚焦时,由于布局已经调整过,所以问题不再出现。
解决方案
1. 使用 adjust-position
属性
<textarea>
组件提供了一个 adjust-position
属性,用于控制当键盘弹出时是否自动调整页面的位置,以避免输入框被键盘遮挡。默认情况下,adjust-position
是开启的,但你可以显式地设置它以确保其生效。
<textarea adjust-position="true"></textarea>
2. 手动调整页面位置
如果 adjust-position
属性不能完全解决问题,你可以手动监听键盘的弹出事件,并在键盘弹出时调整页面的滚动位置。
export default {
methods: {
onFocus() {
// 手动调整页面滚动位置
uni.pageScrollTo({
scrollTop: 200, // 根据实际情况调整
duration: 300
});
}
}
}
然后在 <textarea>
上绑定 focus
事件:
<textarea @focus="onFocus"></textarea>
3. 使用 uni.onKeyboardHeightChange
监听键盘高度变化
你可以通过监听键盘高度变化来动态调整页面布局,避免输入框被键盘遮挡。
export default {
data() {
return {
keyboardHeight: 0
};
},
mounted() {
uni.onKeyboardHeightChange(res => {
this.keyboardHeight = res.height;
this.adjustPagePosition();
});
},
methods: {
adjustPagePosition() {
// 根据键盘高度调整页面滚动位置
uni.pageScrollTo({
scrollTop: this.keyboardHeight, // 根据实际情况调整
duration: 300
});
}
}
}
4. 使用 scroll-into-view
属性
在某些情况下,你可以使用 scroll-into-view
属性来确保输入框在聚焦时自动滚动到可视区域。
<textarea scroll-into-view="inputId"></textarea>