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

8 回复

你是说之前的版本 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
}
回到顶部