HarmonyOS 鸿蒙Next List组件显示不全

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next List组件显示不全

先看看布局

build() {
Column() {
TitleComponent({ title: this.title })
Row() {
this.TabBuilder(1, ‘点赞’);
this.TabBuilder(2, ‘收藏’)
}.backgroundColor(Color.White)
//tab list
List() {
ForEach(this.tabs, (item: InteractionTabBean) => {
ListItem() {
InteractionTabItemComponent({
tabData: item, name: this.clickTabName
}).onClick(() => {
this.clickTabName = item.name
})
}.onAreaChange((oldArea: Area, newArea: Area) => {//根据内容自适应高度
if (this.maxItemHeight < newArea.height) {
this.maxItemHeight = newArea.height as number
}
})
}, (item: InteractionTabBean) => JSON.stringify(item))
}
.width(‘100%’)
.height(this.maxItemHeight == -1 ? undefined : this.maxItemHeight+10)//根据内容自适应高度
.margin({ top: 10 })
.scrollBar(BarState.Off)
.listDirection(Axis.Horizontal)
Row(){

}
//列表
List() {
ForEach(this.lists, (item: InteractionListBean) => {
ListItem() {
InteractionItemComponent({
itemData: item
}).onClick(() => {
this.clickTabName = item.name
})
}
}, (item: InteractionTabBean) => JSON.stringify(item))
}
.scrollBar(BarState.Off)
.divider({strokeWidth:10,color:$r(‘app.color.co_F5F6F9’)})//分割线
.margin({left:12,right:12,bottom:10})
.backgroundColor($r(‘app.color.co_F5F6F9’))
.listDirection(Axis.Vertical)
}
.backgroundColor($r(‘app.color.co_F6F6FB’))
.height(‘100%’)
}

最后的List列表居然显示不全,设置高度‘100%’也不行,这不应该啊,正常应该我上拉到底,数据显示全的,结果我全部拉上来显示,放开就回弹下去

cke_4961.pngcke_5316.png

10 回复
把list的 .height('100%') 换成 .layoutWeight(1)试试

这样是可以的,就是保持疑问,这个高度100%居然不是空于内容的,是整个父布局的高度?

100%不管是width还是height你就把它看成是屏幕的实际宽高,你如果给一个组件设置一个width = ‘100%’ 意思就是这个组件的宽度就是屏幕的宽度,同理height也是的,layoutWeight设置为1的意思就是,在其他固定布局设置完宽或者是高之后剩余的部分填充满

List指定高度过长,多余的就显示在屏幕外了,可滚动组件一定要限定合适高度,否则出现部分内容不能出现在屏幕内。所以List不适合用动态高度设置.height属性,用.layoutWeight(1)之类或确定高度值限定显示范围在屏幕内才可让滚动内容也在屏幕内可显。

.layoutWeight(1) 也出现同样的问题要怎么解决呢

具体问题具体分析,没有代码空谈万能解决方案偶也木有:) 简单点说,自己从组件层级一层层分析各层组件尺寸是如何确定的,相互影响是啥,最后找出问题原因。

如果外部还有线性容器,也要加 .layoutWeight(1)。 Column() { List () {}.layoutWeight(1)}.layoutWeight(1); 我这边这么解决的

在List组件外面加一个容器组件限定。

Column() {

Row(){

  TitleComponent({ title: this.title })

}.height('5%’)

Row() { this.TabBuilder(1, '点赞'); this.TabBuilder(2, '收藏') }

     .height('5%’)

    .backgroundColor(Color.White)

Row(){

   //tab list

   List() {}

}.height('90%’)

}.height('100%’)

谢谢,其实我本意是想让剩余的空间给List填满的,就像给布局设置了match_parent,但是发现设置‘100%’也不行

针对HarmonyOS 鸿蒙Next List组件显示不全的问题,这通常是由于布局或组件属性设置不当导致的。以下是一些可能的解决方案:

  1. 检查布局:确保List组件所在的布局容器(如Column、Row等)有足够的空间来显示List的所有项。如果布局容器被其他组件(如ToolBar、TabBar等)遮挡,需要调整这些组件的位置或大小,或为List组件设置适当的内边距(padding)。
  2. 调整List属性:检查List组件的space属性,确保它不会导致项与项之间的间距过大,从而超出布局容器的范围。同时,也可以尝试调整List组件的heightwidth属性,以适应布局容器的尺寸。
  3. 隐藏不必要的组件:如果List组件上方或下方有导航栏、标题栏等组件,且这些组件遮挡了List的部分内容,可以尝试隐藏这些组件,或使用.hideTitleBar(true)等方法来调整布局。

如果以上方法均无法解决问题,建议检查鸿蒙Next的官方文档或论坛,看看是否有其他开发者遇到并解决了类似的问题。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部