uni-app input自动获取焦点 ios无效,HB3.2.3及最新HB_3.2.9均不行
uni-app input自动获取焦点 ios无效,HB3.2.3及最新HB_3.2.9均不行
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 7 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:windows7
HBuilderX类型:正式
HBuilderX版本号:3.2.9
手机系统:iOS
手机系统版本号:IOS 14
手机厂商:苹果
手机机型:iphone11 pro
页面类型:vue
打包方式:云端
项目创建方式:HBuilderX
### 示例代码:
```html
<input class="keyword" :focus="true" placeholder-class="uni-input-placeholder" placeholder="请输入标题" name="keyWord"/>
操作步骤:
<input class="keyword" :focus="inputAutofocus" placeholder-class="uni-input-placeholder" placeholder="请输入标题" name="keyWord"/>
onShow() {
this.inputAutofocus = false;
setTimeout(() => {
this.inputAutofocus = true;
}, 500)
},
预期结果:
从A页面进入B页面,input自动获取焦点,拉起键盘,输入框有光标
实际结果:
android app和H5均可以,ios app和H5均无法达到目的
bug描述:
期望: 从A页面进入B页面,input自动获取焦点,拉起键盘,输入框有光标
结果: android app和H5均可以,ios app和H5均无法达到目的
更多关于uni-app input自动获取焦点 ios无效,HB3.2.3及最新HB_3.2.9均不行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你是说之前的版本 iOS 仅 h5 不能自动获取焦点,而 app 是可以的,更新后,iOS APP 也不能获取焦点了吗?
更多关于uni-app input自动获取焦点 ios无效,HB3.2.3及最新HB_3.2.9均不行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
抱歉抱歉 我单跑demo没问题,应该是我们项目有问题 我找下问题
我简单写了个demo,单个页面刷新页面可以获取到焦点,但是,假如从A页面跳转到B页面,触发B页面onshow里面的延时赋值或者直接赋值focus为itrue,确实是拉不起键盘,获取不到焦点的
用手机H5或者基座APP调试(ios),PC正常
回复 1***@qq.com: 首先 iOS 浏览器内的焦点设置只能由用户直接触发。所以现在只谈一下 iOS-App,你是对比测试过旧版本正常,而新版本失效吗?
回复 DCloud_UNI_GSQ: APP没有问题,没有版本差异造成的问题,先前是我弄错了(单页面我可以自动获取,跳转页面无法获取,导致我误以为是版本差异,结果发现都是),抱歉哈。。。。。那现在就是只有ios浏览器打开会有无法自动获取焦点的问题了吧
你好解决了嘛?safari浏览器无法获取焦点问题
这是一个已知的iOS平台兼容性问题。iOS系统对自动获取焦点有更严格的限制,尤其是在页面加载时。以下是几种已验证的解决方案:
方案一:使用nextTick延迟设置focus
onShow() {
this.$nextTick(() => {
this.inputAutofocus = true;
});
}
方案二:增加延迟时间(推荐)
onShow() {
this.inputAutofocus = false;
setTimeout(() => {
this.inputAutofocus = true;
}, 800); // iOS需要更长的延迟
}
方案三:使用refs手动触发焦点
<input ref="myInput" />
onShow() {
setTimeout(() => {
this.$refs.myInput.focus();
}, 800);
}
方案四:条件编译处理iOS特殊逻辑
onShow() {
// #ifdef APP-PLUS
if (uni.getSystemInfoSync().platform === 'ios') {
setTimeout(() => {
this.inputAutofocus = true;
}, 800);
} else {
this.inputAutofocus = true;
}
// #endif
// #ifndef APP-PLUS
this.inputAutofocus = true;
// #endif
}

