Compose实现行内多列根据最长文本高度统一列高
解决方案
要让Row内所有Column的高度和最长文本所在列一致,别用IntrinsicSize.Max,换下面这个方法:
核心思路
把Row的crossAxisAlignment设为CrossAxisAlignment.stretch,强制所有子项(Column)的高度和Row保持一致,而Row的高度会自动适配内容最长的那个Column。再给每个Column套Expanded,让它们合理分配Row的宽度空间。
示例代码
Row( // 关键配置:让子项拉伸填满Row的高度 crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( child: Column( // 可选:控制文本在Column内的垂直位置,比如start/center/end mainAxisAlignment: MainAxisAlignment.start, children: const [Text("Short")], ), ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: const [Text("Testt + Test")], ), ), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: const [Text("Medium")], ), ), ], )
为什么之前的方法没用?
IntrinsicSize.Max是让Column根据自身内容计算高度,反而会导致每个Column只适配自己的文本高度,达不到统一高度的效果。而CrossAxisAlignment.stretch会让Row的子项强制继承Row的高度,Row的高度又由最高的子项决定,刚好满足你的需求。
如果不需要三列平分宽度,可以把Expanded换成Flexible并自定义flex值,或者直接给Column设置固定宽度,只要保留Row的crossAxisAlignment: CrossAxisAlignment.stretch即可。
内容的提问来源于stack exchange,提问作者BRDroid
相关产品推荐
相关产品推荐

