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

SwiftUI:如何将List居中显示在VStack父视图中?

SwiftUI List居中解决方案

问题原因

List在SwiftUI中默认会尽可能占据父视图的所有可用垂直空间,导致你添加的Spacer无法将其推到视图中央——List已经填满了中间的空间,Spacer没有多余的空间来挤压布局。

解决方法

方法一:让List自适应内容高度

给List添加fixedSize(horizontal: false, vertical: true),让它在垂直方向上仅占用内容所需高度,不再填充整个父视图空间。此时VStack的Spacer就能将List推到中央:

var body: some View {
    VStack(alignment: .center) {
        Spacer()
        
        List {
            Section {
                Text("Row 1")
                Text("Row 2")
            } header: {
                Text("Header")
                    .font(.title3)
                    .padding()
            } footer: {
                Text("Footer")
                    .font(.body)
                    .padding()
            }
        }
        .listStyle(.insetGrouped)
        .fixedSize(horizontal: false, vertical: true) // 关键设置
        
        Spacer()
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity)
    .environment(\.defaultMinListRowHeight, 50)
}

方法二:给List设置固定高度

如果需要List保持固定高度,可以直接给List添加frame(height: ...),同样能让Spacer将其推到中央:

var body: some View {
    VStack(alignment: .center) {
        Spacer()
        
        List {
            Section {
                Text("Row 1")
                Text("Row 2")
            } header: {
                Text("Header")
                    .font(.title3)
                    .padding()
            } footer: {
                Text("Footer")
                    .font(.body)
                    .padding()
            }
        }
        .listStyle(.insetGrouped)
        .frame(height: 300) // 固定高度,可根据需求调整
        
        Spacer()
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity)
    .environment(\.defaultMinListRowHeight, 50)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:30