Cel
Uzyskaj dane do wyświetlenia w scrollView
Spodziewany wynik
Aktualny rezultat
Alternatywny
użyj List
, ale nie jest elastyczny (nie można usunąć separatorów, nie może mieć wielu kolumn)
Kod
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
oświadczenie, stądreturn
Odpowiedzi:
Nie tak hackowanym sposobem na obejście tego problemu jest umieszczenie ScrollView w instrukcji IF, która sprawdza, czy tablica jest pusta
źródło
Oczekiwane zachowanie występuje w dniu
Xcode 11.1
ale nieXcode 11.2.1
Dodałem
frame
modyfikator doScrollView
którego sięScrollView
pojawiająźródło
Przekonałem się, że działa (Xcode 11.2) zgodnie z oczekiwaniami, jeśli stan został zainicjowany z pewną wartością, a nie pustą tablicą. W takim przypadku aktualizacja działa poprawnie, a stan początkowy nie ma wpływu.
źródło
onAppear
, więc zainicjowanie scrollView z fałszywymi danymi może być problematyczneJednym z okropnych obejść, które znalazłem, jest dodanie „niewidocznego”
Rectangle
wewnątrz scrollView, przywidth
ustawieniu wartości większej niż szerokość danych wscrollView
źródło