HarmonyOS 鸿蒙Next Tab有多个TabContent,ForEach循环场景下通过构建函数自定义TabBar的icon图片不显示,当在函数里单独用$tr使用却没有问题
HarmonyOS 鸿蒙Next Tab有多个TabContent,ForEach循环场景下通过构建函数自定义TabBar的icon图片不显示,当在函数里单独用$tr使用却没有问题
构建函数自定义tabbar里面的图片不显示
- tab里使用ForEach遍历渲染代码如下:
Tabs({
index: this.activeIndex,
barPosition: BarPosition.End,
}) {
ForEach(mainViewModel.tabTitle, (item: TabItem,index:number) => {
TabContent(){
Column() {
Text(item.title).fontSize(50)
}
}
.tabBar(this.TabBuilder(item,index))
})
}
- 自定义tabbar构建函数如下
@Builder TabBuilder(item: TabItem, index: number) {
Column() {
Image(this.activeIndex === item.index ? $r('app.media.icon_home_active') : $r('app.media.icon_home')) => 这行是能正常显示图片
// Image(this.activeIndex == item.index ? item.imageActivated : item.imageOriginal) => 这样写却不显示图片
.width(size.middlIconSize)
.height(size.middlIconSize)
.margin({top:size.smallPadding,bottom:size.smallPadding})
Text(item.title)
.fontColor(this.activeIndex === index ? colors.tabSelectedColor : colors.tabNormalColor)
.fontSize(size.normalFontSize)
.fontWeight(500)
.textAlign(TextAlign.Center)
.padding({bottom:size.pagePadding})
}
.width('100%')
.justifyContent(FlexAlign.Center)
}
- 附上声明的tab数组数据如下:
export class MainViewModel {
/**
* 首页底部Tab显示数据
*/
tabTitle = [
{
index: 0,
title: "首页",
imageActivated: $r('app.media.icon_home_active'),
imageOriginal: $r('app.media.icon_home')
},
{
index: 1,
title: "电影",
imageActivated: $r('app.media.icon_movie_active'),
imageOriginal: $r('app.media.icon_movie')
},
{
index: 2,
title: "电视剧",
imageActivated: $r('app.media.icon_tv_active'),
imageOriginal: $r('app.media.icon_tv')
},
{
index: 3,
title: "我的",
imageActivated: $r('app.media.icon_user_active'),
imageOriginal: $r('app.media.icon_user')
}
]
}
let mainViewModel = new MainViewModel();
export default mainViewModel as MainViewModel;
更多关于HarmonyOS 鸿蒙Next Tab有多个TabContent,ForEach循环场景下通过构建函数自定义TabBar的icon图片不显示,当在函数里单独用$tr使用却没有问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在HarmonyOS鸿蒙Next中,使用ForEach
循环场景下通过构建函数自定义TabBar
的icon
图片不显示,但在函数里单独使用$tr
却没有问题,可能是由于ForEach
的渲染机制与TabBar
的icon
绑定方式不兼容导致的。ForEach
在渲染时可能会重新创建组件实例,导致某些状态或资源未能正确绑定。
你可以尝试以下解决方法:
- 确保
icon
资源的路径和命名正确,并且在ForEach
中正确引用。 - 使用
@State
或@Link
装饰器来管理TabBar
的状态,确保在ForEach
循环中icon
能够正确绑定。 - 如果
icon
资源是通过动态加载的,确保在ForEach
的itemBuilder
中正确加载并绑定资源。
如果问题仍然存在,可能需要进一步调试ForEach
的渲染逻辑或检查TabBar
的icon
绑定机制。