SwiftUI Hide List Cell, если она пуста - PullRequest
0 голосов
/ 10 марта 2020

У меня есть представление в моем проекте Swift5, где я использую SwiftUI. Это представление списка.

Есть ли способ добавить или удалить VStack из списка в зависимости от данных переменной?

Я не могу поместить логи c в эту часть код, так что теперь я борюсь.

List {
            VStack {
                Text(txt)
                    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
            }
            VStack { // this view should be displayed or hidden if the data variable is 0
                Image(uiImage: image)
                    .resizable()
                    .scaledToFit()
                    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .bottomLeading)
            }.onReceive(imageLoader.didChange) { data in
                self.image = UIImage(data: data) ?? UIImage()

                // here I check if there is any kind of data
                if data.count == 0 {
                    print("Data is 0 so there is no image") // in this case I don't need the second VStack
                } else {
                    print("Data is not 0 so there is an image") // in this case I need the second VStack
                }
            }
        }

Я никогда не пытался изучать SwiftUI, потому что я привык к Swift5, поэтому у меня нет никаких знаний по SwiftUI.

1 Ответ

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

Вот простое представление: если вы нажимаете на кнопку, первый элемент в списке исчезает, а если вы нажимаете на него снова, он снова появляется:

Для достижения этой цели я использую переменную @State. Изменение состояния моего взгляда заставляет мой взгляд перезагрузиться. В Интернете есть много хороших статей, в которых описывается функциональность @ State.

import SwiftUI

struct ContentView: View {

    @State private var show = true

    var body: some View {
        VStack {
            List {
                if show {
                    Text("Text1")
                }
                Text("Text2")
                Text("Text3")
            }

            Button(action: {
                self.show.toggle()
            }) {
                Text("Hide Text1")
            }
        }
    }
}

Вы можете добиться того же в своем примере:

if data.count == 0 {
   self.show = false
} else {
   self.show = true
}

вы можете использовать установленную вами переменную show на основе данных для отображения представления.

if show {
    Text("Text1") // Or whatever view you like
}
...