SwiftUI中LazyVGrid设置GridItem.fixed固定宽度不生效问题
问题原因
问题由SwiftUI修饰符的执行顺序错误导致:
原代码中修饰符顺序为padding → background → frame,背景色只会覆盖「文本内容+内边距」的区域,后续设置的maxWidth: .infinity仅会扩大视图的布局占位范围,不会让背景色同步延伸到整个区域,因此看起来按钮宽度没有跟随GridItem的固定配置统一,实际上GridItem的.fixed(100)已经生效。
解决方法
调整BB组件的修饰符顺序,先设置撑满可用宽度的frame,再添加内边距和背景即可,无需修改GridItem配置:
struct BB:View { var content:String var value:Int var body:some View{ Button(action: {}) { Text(content) } .frame(minWidth: 0, maxWidth: .infinity, minHeight: 50) .padding() .background(Color.gray) .foregroundColor(Color.white) .font(.system(size:40)) .cornerRadius(5) } }
修改后每个按钮的背景都会完全填充LazyVGrid分配的100pt宽度,无论文本内容长度如何,所有按钮宽度都会保持一致。
内容的提问来源于stack exchange,提问作者yleyver
相关产品推荐
相关产品推荐

