Objectif
Obtenez les données à afficher dans un scrollView
résultat attendu
Résultat actuel
Alternative
utiliser List
, mais il n'est pas flexible (ne peut pas supprimer les séparateurs, ne peut pas avoir plusieurs colonnes)
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
déclaration avant, d'où lereturn
Réponses:
Un moyen pas si hacky de contourner ce problème est de placer ScrollView dans une instruction IF qui vérifie si le tableau est vide
la source
Le comportement attendu se produit
Xcode 11.1
mais n'est pas activéXcode 11.2.1
J'ai ajouté un
frame
modificateurScrollView
qui faitScrollView
apparaîtrela source
J'ai trouvé que cela fonctionne (Xcode 11.2) comme prévu si l'état est initialisé avec une certaine valeur, pas un tableau vide. Dans ce cas, la mise à jour fonctionne correctement et l'état initial n'a aucun effet.
la source
onAppear
, donc initialiser le scrollView avec des données factices peut être problématiqueUne solution de contournement hacky que j'ai trouvée consiste à ajouter un "invisible"
Rectangle
à l'intérieur du scrollView, avec l'width
ensemble à une valeur supérieure à la largeur des données dans lescrollView
la source