You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:22:42