如何让SwiftUI的Grid单元格跨行而非跨列?
SwiftUI Grid 跨行单元格解决方案
目前SwiftUI官方的Grid组件没有提供类似.gridCellColumns()的跨行视图修饰符,官方文档里也仅提及了跨列的配置方式。
针对你想实现的垂直分隔线跨行效果,不用自定义Layout也能搞定,这里给个简单实用的方案:
利用GeometryReader获取Grid的整体尺寸,再通过overlay把分隔线定位到对应列的位置,让它高度铺满整个Grid。这样既保留了Grid列宽均等的特性,又实现了跨行的垂直分隔线效果,代码示例如下:
struct GridVerticalDividerDemo: View { var body: some View { GeometryReader { gridProxy in Grid(alignment: .center) { GridRow { Text("第一行左") Text("第一行右") } GridRow { Text("第二行左") Text("第二行右") } GridRow { Text("第三行左") Text("第三行右") } } .overlay( // 垂直分隔线,宽度1,颜色灰色 Color.gray .frame(width: 1) // 定位到Grid水平中心位置,对应两列的中间 .position(x: gridProxy.size.width / 2, y: gridProxy.size.height / 2) ) } .padding() } }
如果是要实现内容单元格跨行(不是分隔线),目前没有官方捷径,只能通过嵌套布局或者自定义Layout协议来实现,但如果需求不复杂,嵌套Grid+对齐调整也能应付:比如把跨行的单元格单独做成一个VStack,和其他列的Grid放在HStack里,通过alignment: .top保证顶部对齐,同时用fixedSize或者frame约束尺寸匹配。
内容的提问来源于stack exchange,提问作者iSpain17
相关产品推荐
相关产品推荐

