Objetivo
Obter dados para exibição em um scrollView
resultado esperado
Resultado atual
Alternativa
use List
, mas não é flexível (não é possível remover separadores, não pode ter várias colunas)
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
declaração antes, daí areturn
Respostas:
Uma maneira não tão hacky de contornar esse problema é colocar o ScrollView em uma instrução IF que verifica se a matriz está vazia
fonte
O comportamento esperado ocorre,
Xcode 11.1
mas não acontece.Xcode 11.2.1
Eu adicionei um
frame
modificador aoScrollView
qual fazerScrollView
aparecerfonte
Eu descobri que ele funciona (Xcode 11.2) como esperado se o estado foi inicializado com algum valor, e não uma matriz vazia. Nesse caso, a atualização funciona corretamente e o estado inicial não tem efeito.
fonte
onAppear
, então inicializar o scrollView com dados fictícios pode ser problemáticoUma solução hacky que encontrei é adicionar um "invisível"
Rectangle
dentro do scrollView, com owidth
conjunto com um valor maior que a largura dos dados noscrollView
fonte