SwiftUI List inside ScrollVIew

删除回忆录丶 提交于 2020-12-30 05:57:23

问题


I want to make my List inside a ScrollView so that I can scroll List rows and headers together. But I found that List inside ScrollView isn't working. It shows nothing. Anyone know why this happens and(or) how to fix?

I should use both of them.

  • I should use ScrollView so that I can make my header(image or text) also scrolled when I scroll the rows.
  • I should use List to use .ondelete() method.

my sample code is below.

@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("\($0)")
            }
            .onDelete { index in
                // delete item
            }
        }
    }
}

回答1:


It is possible but not when the List is using the full screen.

In the code example I used GeometryReader to make the list as big as possible. But you can also remove the GeometryReader and just insert a fixed dimension into .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("\($0)")
                }
                .onDelete { index in
                    // delete item
                }
            }.frame(width: g.size.width - 5, height: g.size.height - 50, alignment: .center)
        }
    }
}

}




回答2:


There is no need of Two scrolling object you can also use section for this

    @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("\($0)")
            }
            .onDelete { index in
                // delete item
            }
        }
    }



回答3:


Just put header inside the List, like

demo

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


来源:https://stackoverflow.com/questions/60688913/swiftui-list-inside-scrollview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!