Почему первый элемент списка отображается полностью на открытом листе - PullRequest
0 голосов
/ 17 марта 2020

Я передаю переменную связывания в другое представление:

struct PocketlistView: View {

    @ObservedObject var pocket = Pocket()
    @State var isSheetIsVisible = false


    var body: some View {

        NavigationView{
            List{
                ForEach(Array(pocket.pockets.enumerated()), id: \.element.id) { (index, pocketItem) in
                    VStack(alignment: .leading){
                        Text(pocketItem.name).font(.headline)
                        Text(pocketItem.type).font(.footnote)
                    }
                    .onTapGesture {
                        self.isSheetIsVisible.toggle()
                    }
                    .sheet(isPresented: self.$isSheetIsVisible){
                        PocketDetailsView(pocketItem: self.$pocket.pockets[index])
                    }
                }
            }
            .listStyle(GroupedListStyle())
            .navigationBarTitle("Pockets")
        }
    }
}

другое представление:

struct PocketDetailsView: View {

    @Binding var pocketItem: PocketItem

    var body: some View {
        Text("\(pocketItem.name)")
    }
}

Почему я вижу первый элемент, когда открываю лист для второй или третьей строки ? Когда я использую NavigationLink вместо .sheet, он отлично работает

1 Ответ

0 голосов
/ 17 марта 2020

Вы активируете все листы одновременно, попробуйте следующий подход (я не могу проверить ваш код, но идея должна быть ясна)

struct PocketlistView: View {

    @ObservedObject var pocket = Pocket()
    @State var selectedItem: PocketItem? = nil


    var body: some View {

        NavigationView{
            List{
                ForEach(Array(pocket.pockets.enumerated()), id: \.element.id) { (index, pocketItem) in
                    VStack(alignment: .leading){
                        Text(pocketItem.name).font(.headline)
                        Text(pocketItem.type).font(.footnote)
                    }
                    .onTapGesture {
                        self.selectedItem = pocketItem
                    }
                }
            }
            .listStyle(GroupedListStyle())
            .navigationBarTitle("Pockets")
            .sheet(item: self.$selectedPocket) { item in
                PocketDetailsView(pocketItem: 
                    self.$pocket.pockets[self.pocket.pockets.firstIndex(of: item)!])
            }

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...