1***@qq.com
1***@qq.com
  • 发布:2021-01-12 14:31
  • 更新:2021-01-15 11:30
  • 阅读:589

【报Bug】因为要国际化,所以要动态修改tabbar 的 text,以下代码在ios上直接崩溃,在android正常

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 无论是windows还是mac结果都一样

HBuilderX类型: 正式

HBuilderX版本号: 3.0.5

手机系统: iOS

手机系统版本号: IOS 14

手机厂商: 苹果

手机机型: iPhone7

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

App.vue

onLaunch: function() {  
    //app启动时打开启动广告页  
    // #ifdef APP-PLUS  
    var w = plus.webview.open(  
      "hybrid/html/advertise/advertise.html",  
      "本地地址",  
      { top: 0, bottom: 0, zindex: 999 },  
      "fade-in",  
      500  
    );  
    //设置定时器,4s后关闭启动广告页  
    setTimeout(function() {  
      plus.webview.close(w);  
    }, 4000);  
    //#endif  
    this.$store.commit(LANG, uni.getStorageSync(Lang) || DefaultLang);  
    if (!this.sysInfo) {  
      this.$store.commit(SYSTEM, this.$u.sys());  
    }  
    const CACHE_KEY = "clear_1.0.1";  
    if (!uni.getStorageSync(CACHE_KEY)) {  
      logoutBefore();  
      uni.setStorageSync(CACHE_KEY, 1);  
    }  
    if (this.token) {  
      this.$store.dispatch(USERINFO);  
    }  
  }

store.js

mutations:{  

LANG: (state, lang) => {  
        if (lang === state.lang) return;  
        uni.setStorageSync(Lang, lang);  
        state.lang = lang;  
        i18n.locale = lang;  
        TabbarRoutes.forEach((v, i) => {  
            uni.setTabBarItem({  
                index: i,  
                text: getTabBarText(v.name)  
            })  
        })  

        uni.$emit("changeLang", {  
            lang,  
            origin: state.origin  
        })  
    },  
}

操作步骤:

mutations:{

LANG: (state, lang) => {
if (lang === state.lang) return;
uni.setStorageSync(Lang, lang);
state.lang = lang;
i18n.locale = lang;
TabbarRoutes.forEach((v, i) => {
uni.setTabBarItem({
index: i,
text: getTabBarText(v.name)
})
})

    uni.$emit("changeLang", {  
        lang,  
        origin: state.origin  
    })  
},  

}

将其中的uni.setTabBaritem移除,程序将正常执行

预期结果:

uni.setTabBarItem 应在ios上可以正常修改 text

实际结果:

在ios上直接崩溃

bug描述:

因为要国际化,所以要动态修改tabbar 的 text,以下代码在ios上直接崩溃,在android正常

TabbarRoutes.forEach((v, i) => {  
            uni.setTabBarItem({  
                index: i,  
                text: getTabBarText(v.name)  
            })  
})
2021-01-12 14:31 负责人:无 分享
已邀请:
DCloud_UNI_LXH

DCloud_UNI_LXH

有无报错信息,共几个tabbar?如果可以方便提供一个简单可复现的demo

  • 1***@qq.com (作者)

    没有任何报错信息,4个tabbar,将foreach,改成4次调用setTabBarItem函数后就没有崩溃了

    2021-01-13 17:42

  • DCloud_UNI_LXH

    回复 1***@qq.com: 我测试了一下,4个tabbar,稳定版3.0.5,ios14的6s,没有发现你说的奔溃问题。如果你的代码检查无误,可以提供一个可复现的demo供我们定位问题

    2021-01-13 18:17

  • 1***@qq.com (作者)

    回复 DCloud_UNI_LXH: 使用forEach迭代会崩溃,分开写四次不会,如下截图

    2021-01-15 11:31

1***@qq.com

1***@qq.com (作者)

如下

  • DCloud_UNI_LXH

    我的意思是,你是否可以开一个简单的项目,然后复现这个问题,最后把这个项目发给我。因为要排除是否是其他原因导致的问题。

    2021-01-15 19:23

该问题目前已经被锁定, 无法添加新回复