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

SwiftUI中Grid动态宽度单元格换行问题求助

SwiftUI Grid 文本自动换行问题解决办法

你的问题出在外层的水平ScrollView导致Grid没有宽度约束,内部的长文本会无限横向延展,不会自动换行。下面是两种修改方案:

方案一:给单元格设置固定宽度

给每个GridRow里的内容容器设置固定宽度,同时让文本允许垂直换行:

ScrollView(.horizontal) {
    Grid {
        ForEach(0..<3) { _ in
            GridRow {
                VStack(alignment: .leading, spacing: 16) {
                    VStack(alignment: .leading, spacing: 8) {
                        Text("Lorem".uppercased())
                            .bold()
                            .font(.footnote)
                        Text("Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ")
                            .font(.caption)
                            // 关闭水平方向自适应,允许垂直换行
                            .fixedSize(horizontal: false, vertical: true)
                    }
                }
                // 固定单元格宽度,可根据需求调整数值
                .frame(width: 280)
            }
            .padding(16)
            .background(.secondary.opacity(0.1))
            .clipShape(.buttonBorder)
        }
    }
}

方案二:设置最大宽度(自适应场景)

如果不想用固定宽度,可以给内容容器设置最大宽度,文本会在最大宽度内自动换行:

ScrollView(.horizontal) {
    Grid {
        ForEach(0..<3) { _ in
            GridRow {
                VStack(alignment: .leading, spacing: 16) {
                    VStack(alignment: .leading, spacing: 8) {
                        Text("Lorem".uppercased())
                            .bold()
                            .font(.footnote)
                        Text("Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem Lorem ")
                            .font(.caption)
                            .fixedSize(horizontal: false, vertical: true)
                    }
                }
                // 设置单元格最大宽度,超过后文本自动换行
                .frame(maxWidth: 300)
            }
            .padding(16)
            .background(.secondary.opacity(0.1))
            .clipShape(.buttonBorder)
        }
    }
}

核心要点:必须给Grid的单元格内容添加宽度约束(固定或最大宽度),同时给长文本加上.fixedSize(horizontal: false, vertical: true),强制文本在宽度限制内自动换行。

内容的提问来源于stack exchange,提问作者kAiN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:00:06