uni-app 重新打开 app后 首次textarea获得焦点时 键盘会遮挡 textarea
uni-app 重新打开 app后 首次textarea获得焦点时 键盘会遮挡 textarea
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | macOS 12 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:macos 12
HBuilderX类型:正式
HBuilderX版本号:3.2.13
手机系统:iOS
手机系统版本号:iOS 15
手机厂商:苹果
手机机型:ip Xr、ip 13 pro、一加5t
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
示例代码:
<textarea id="textarea-info"
class="pad10"
confirm-type="send"
cursor-spacing="50"
style="'height:'+ textarea_h +'px;'"
value="content"
hold-keyboard="true"
maxlength="-1"
@focus="openInput"
@input="setContent"
@confirm="sendMsg"/>
操作步骤:
- 重启app
- 首次让textarea 获取焦点
- 键盘弹出遮挡部分 textarea 输入框
- 失去焦点再点击输入框 恢复正常
- 重启后回再次出现以上步骤
预期结果:
重启app 后 ,首次 textarea聚焦打开 键盘时 ,键盘不遮挡textarea 输入框
实际结果:
重启app 后 ,首次 textarea聚焦打开 键盘时 ,键盘 把textarea输入框遮挡 一部分
失去焦点再 聚焦后 键盘才正常 不遮挡 textarea输入框
bug描述:
重新打开 app ,首次textarea 获得焦点时,键盘会遮挡 textarea, 详见附件
<textarea id="textarea-info"
class="pad10"
confirm-type="send"
cursor-spacing="50"
:style="'height:'+ textarea_h +'px;'"
:value="content"
:hold-keyboard="true"
:maxlength="-1"
@focus="openInput"
@input="setContent"
@confirm="sendMsg"/>
更多关于uni-app 重新打开 app后 首次textarea获得焦点时 键盘会遮挡 textarea的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app 重新打开 app后 首次textarea获得焦点时 键盘会遮挡 textarea的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的iOS平台上的键盘遮挡问题,通常在应用重启后首次聚焦输入框时出现。主要原因是键盘弹出时页面布局调整的时机问题。
解决方案:
-
使用
cursor-spacing属性
你已经在代码中设置了cursor-spacing="50",这应该能提供一定的间距。可以尝试增大这个值,比如cursor-spacing="100",确保有足够的空间。 -
添加
adjust-position属性
在 textarea 上添加adjust-position="true",让页面自动调整位置避免遮挡:<textarea adjust-position="true" ...其他属性 /> -
手动调整滚动位置
在@focus事件中,使用uni.pageScrollTo手动滚动到输入框位置:openInput() { setTimeout(() => { uni.createSelectorQuery() .select('#textarea-info') .boundingClientRect(rect => { uni.pageScrollTo({ scrollTop: rect.top, duration: 300 }) }) .exec() }, 100) // 延迟确保键盘已弹出 } -
使用
focus方法的回调
如果通过代码触发聚焦,可以使用回调:this.$nextTick(() => { uni.createSelectorQuery() .select('#textarea-info') .focus() .exec() })

