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

NavigationSplitView侧边栏多列表分段仅显示单个项问题

问题原因与解决方案

错误根源

你在Section内部嵌套了List组件,这违反了SwiftUI的列表结构逻辑:Section是List的分组容器,仅用于包裹行元素(如Text、Button等),而非嵌套另一个完整的List。内层List会被当作单个行元素渲染,所以每个分段下只显示了一个容器视图,而非所有数字条目。

修正代码

将内层的List替换为ForEach即可解决问题,ForEach是SwiftUI中用于批量生成视图的正确结构:

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationSplitView {
            List {
                Section("Test 1") {
                    ForEach(0...20, id: \.self) { i in
                        Text("\(i)")
                    }
                }
                
                Section("Test 2") {
                    ForEach(21...50, id: \.self) { i in
                        Text("\(i)")
                    }
                }
            }
            .listStyle(.sidebar)
        } detail: {
            Text("Details")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

补充说明

在SwiftUI中,List是独立的列表容器,而ForEach负责根据数据源批量生成子视图。当需要在List的分段中展示多个条目时,必须用ForEach来生成行元素,这样外层List才能正确识别所有条目,分段也能正常展开显示全部内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:20:38