#智解鸿蒙 布局报错:Flex 布局里的组件突然消失
下面的代码在预览器里正常,真机运行时Text('备注')直接消失了,去掉flexShrink(0)就显示,这是啥原因?
您需要先 登录 才能评论/回答
全部评论(2)

@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Row(){
Text("标题很长很长很长很长").flexShrink(1)
Text("备注").flexShrink(0)//不允许收缩.marginLeft(10)
.width('100%').padding(10)
}
}
}
大哥 我真机没问题啊。。你确定代码有问题?
2025-11-22 18:16:22
真机宽度不够 + flexShrink(0) 把“备注”这一项变成了“不参与压缩的硬块”,导致它被整个挤到可视区域外,看起来就“消失”了。
预览器更宽,不触发布局压缩,所以一切正常;真机窄,Row/Flex 开始压缩,结果布局被裁剪。
这种“前面长标题 + 后面短标记”的场景,建议让前面的标题负责收缩,尾部文案自然宽度就好,不要给尾部 flexShrink(0)。
Row() {
Text('标题很长很长很长很长')
.layoutWeight(1) // 占满剩余空间
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis }) // 超出省略号
Text('备注')
.marginLeft(10) // 不用设置 flexShrink
}
.width('100%')
.padding(10)
要用 Flex 也可以类似写:
Flex({ direction: FlexDirection.Row }) {
Text('标题很长很长很长很长')
.flexGrow(1)
.flexShrink(1)
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis })
Text('备注')
.marginLeft(10) // 不设置 flexShrink(0),必要时加个 minWidth
}
别给尾部 Text 加 flexShrink(0),改用 layoutWeight/flexGrow 让前面的长标题去压缩,就不会真机“消失”了。
2025-11-21 19:05:17