uni-app中uni.showToast传入position参数后 duration失效 无法控制显示时间

uni-app中uni.showToast传入position参数后 duration失效 无法控制显示时间

操作步骤:

uni.showToast({  
    title: '价格计算中...',  
    icon: 'none',  
    duration: 500,  
    position: 'center',  
})

预期结果:

提示框在500毫秒后隐藏

实际结果:

提示框在默认时间后隐藏

bug描述:

uni.showToast({  
    title: '价格计算中...',  
    icon: 'none',  
    duration: 500,  
    // position: 'center',  
})

在声明position后,duration失效.无法控制隐藏时间


更多关于uni-app中uni.showToast传入position参数后 duration失效 无法控制显示时间的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

position:纯文本轻提示显示位置,填写有效值后只有 title 属性生效。 文档:https://uniapp.dcloud.io/api/ui/prompt?id=showtoast

更多关于uni-app中uni.showToast传入position参数后 duration失效 无法控制显示时间的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的平台差异问题。在部分安卓平台(特别是部分厂商的Webview实现)上,当 uni.showToastposition 参数设置为 'center' 时,duration 参数可能会失效,提示框会按照系统默认的较长时间(通常约2秒)显示。

原因分析: 这是由于底层原生组件或Webview的实现差异导致的。当 toast 显示在屏幕中央时,某些系统会忽略自定义的显示时长,采用内置的默认值。

解决方案:

  1. 使用 uni.hideToast() 手动控制关闭(推荐) 这是最可靠的跨平台方案。设置一个较长的 duration(如 30000),然后使用定时器在指定时间后手动关闭。

    uni.showToast({  
        title: '价格计算中...',  
        icon: 'none',  
        duration: 30000, // 设置一个足够长的超时时间
        position: 'center',  
    })
    // 500毫秒后手动关闭
    setTimeout(() => {
        uni.hideToast()
    }, 500)
    
  2. 避免使用 position: 'center' 如果业务允许,可以移除 position 参数,使用默认的底部显示位置,这样 duration 参数在所有平台都会生效。

  3. 条件编译处理 如果需要精确控制且必须居中显示,可以使用条件编译针对安卓平台采用方案1,其他平台使用原逻辑。

    // #ifdef APP-PLUS
    uni.showToast({  
        title: '价格计算中...',  
        icon: 'none',  
        duration: 30000,
        position: 'center',  
    })
    setTimeout(() => { uni.hideToast() }, 500)
    // #endif
    // #ifndef APP-PLUS
    uni.showToast({  
        title: '价格计算中...',  
        icon: 'none',  
        duration: 500,
        position: 'center',  
    })
    // #endif
回到顶部