ScrollView 中的 SwiftUI 列表

SwiftUI List inside ScrollView

我想在 ScrollView 中制作我的列表,以便我可以滚动列表行和 header 一起滚动。

但我发现 ScrollView 中的 List 不起作用。它什么也没显示。

我应该两者都用。

我的示例代码如下。

@State private var numbers = [1,2,3,4,5,6,7,8,9]

var body: some View {
    ScrollView {
        Text("header")
        List {
            ForEach(numbers, id: \.self) {
                Text("\([=10=])")
            }
            .onDelete { index in
                // delete item
            }
        }
    }
}

有人知道为什么会发生这种情况和(或)如何解决吗?

不需要两个滚动对象。您也可以为此使用部分:

@State private var numbers = [1,2,3,4,5,6,7,8,9]

var body: some View {
    List {
        Section.init {
            Text("Header")
        }
        ForEach(numbers, id: \.self) {
            Text("\([=10=])")
        }
        .onDelete { index in
            // delete item
        }
    }
}

只需将 header 放入列表中,如

var body: some View {
    List {
        Text("Header").font(.title)
        ForEach(numbers, id: \.self) {
            Text("\([=10=])")
        }
        .onDelete { index in
            // delete item
        }
    }
}

可以,但是在List全屏的时候不行

在代码示例中,我使用 GeometryReader 使列表尽可能大。但是您也可以删除 GeometryReader 并将固定尺寸插入 .frame()

struct ContentView: View {
    
    @State private var numbers = [1,2,3,4,5,6,7,8,9]
    
    var body: some View {
        GeometryReader { g in
            ScrollView {
                Text("header")
                List {
                    ForEach(self.numbers, id: \.self) {
                        Text("\([=10=])")
                    }
                    .onDelete { index in
                        // delete item
                    }
                }.frame(width: g.size.width - 5, height: g.size.height - 50, alignment: .center)
            }
        }
    }
}