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")]
})
}
}

returnprintdeclaración antes, de ahí elreturnRespuestas:
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.1pero no enXcode 11.2.1Agregué un
framemodificador alScrollViewque haceScrollViewaparecerfuente
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"
Rectangledentro de scrollView, con elwidthconjunto a un valor mayor que el ancho de los datos en elscrollViewfuente