SwiftUI Список внутри ScrollVIew - PullRequest
2 голосов
/ 15 марта 2020

Я хочу сделать свой список внутри ScrollView, чтобы я мог прокручивать строки и заголовки списка вместе. Но я обнаружил, что список внутри ScrollView не работает. Ничего не показывает Кто-нибудь знает, почему это происходит и (или) как исправить?

Я должен использовать оба из них.

  • Я должен использовать ScrollView, чтобы я мог сделать свой заголовок (изображение или текст) ) также прокручивается при прокрутке строк.
  • Я должен использовать List для использования метода .ondelete ().

мой пример кода приведен ниже.

@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
            }
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 15 марта 2020

Нет необходимости в двух прокручиваемых объектах, вы также можете использовать раздел для этого

    @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
            }
        }
    }
2 голосов
/ 15 марта 2020

Это возможно, но не при использовании полноэкранного списка.

В примере кода я использовал 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("\($0)")
                }
                .onDelete { index in
                    // delete item
                }
            }.frame(width: g.size.width - 5, height: g.size.height - 50, alignment: .center)
        }
    }
}

}

enter image description here

1 голос
/ 15 марта 2020

Просто поместите заголовок в список, как

demo

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