Tor
Daten abrufen, die in a angezeigt werden sollen scrollView
erwartetes Ergebnis
Tatsächliche Ergebnis
Alternative
verwenden List
, aber es ist nicht flexibel (kann keine Trennzeichen entfernen, kann nicht mehrere Spalten haben)
Code
struct Object: Identifiable {
var id: String
}
struct Test: View {
@State var array = [Object]()
var body: some View {
// return VStack { // uncomment this to see that it works perfectly fine
return ScrollView(.vertical) {
ForEach(array) { o in
Text(o.id)
}
}
.onAppear(perform: {
self.array = [Object(id: "1"),Object(id: "2"),Object(id: "3"),Object(id: "4"),Object(id: "5")]
})
}
}
return
print
Erklärung, daher derreturn
Antworten:
Ein nicht so hackiger Weg, um dieses Problem zu umgehen, besteht darin, die ScrollView in eine IF-Anweisung einzuschließen, die prüft, ob das Array leer ist
quelle
Das erwartete Verhalten tritt auf
Xcode 11.1
, aber nicht anXcode 11.2.1
Ich habe einen
frame
Modifikator hinzugefügt , derScrollView
dasScrollView
erscheinen lässtquelle
Ich habe festgestellt, dass es wie erwartet funktioniert (Xcode 11.2), wenn der Status mit einem Wert initialisiert wird, nicht mit einem leeren Array. In diesem Fall funktioniert die Aktualisierung ordnungsgemäß und der Anfangszustand hat keine Auswirkung.
quelle
onAppear
, so dass das Initialisieren der scrollView mit Dummy-Daten problematisch sein kannEine hackige Problemumgehung, die ich gefunden habe, besteht darin,
Rectangle
in der scrollView ein "unsichtbares" Element hinzuzufügen, wobei derwidth
Wert auf einen Wert festgelegt wird, der größer ist als die Breite der Daten in derscrollView
quelle