Objetivo
Obtener datos para mostrar en un scrollView
Resultado Esperado
Resultado actual
Alternativa
uso List
, pero no es flexible (no puede eliminar separadores, no puede tener varias columnas)
Código
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
declaración antes, de ahí elreturn
Respuestas:
Una forma no tan maliciosa de solucionar este problema es incluir el ScrollView en una instrucción IF que verifique si la matriz está vacía
fuente
El comportamiento esperado ocurre en
Xcode 11.1
pero no enXcode 11.2.1
Agregué un
frame
modificador alScrollView
que haceScrollView
aparecerfuente
Descubrí que funciona (Xcode 11.2) como se esperaba si el estado se inicializa con algún valor, no con una matriz vacía. En este caso, la actualización funciona correctamente y el estado inicial no tiene ningún efecto.
fuente
onAppear
, por lo que inicializar scrollView con datos ficticios puede ser problemáticoUna solución alternativa que he encontrado es agregar un "invisible"
Rectangle
dentro de scrollView, con elwidth
conjunto a un valor mayor que el ancho de los datos en elscrollView
fuente