Talvez eu esteja deixando passar algo óbvio aqui, mas não consigo encontrar uma solução. Quero ter uma List() com altura limitada, que me permita rolar dentro dela. Este é um código de exemplo:
struct TestView: View {
var items: [String] = [
"Item 1", "Item 2", "Item 3",
"Item 4", "Item 5", "Item 6",
"Item 7", "Item 8", "Item 9",
"Item 10"
]
@State var selected: String = "one"
var body: some View {
Form {
Section(header: Text("A section")) {
List(selection: $selected) {
ForEach(items, id: \.self) { item in
Text(item)
}
}
.frame(height: 100)
}
}
.formStyle(.grouped)
}
}
Eu esperava que a Lista me permitisse rolar dentro da altura de 100pt, mas, em vez disso, a lista é simplesmente cortada, sem possibilidade de rolagem. Se eu encapsular a Lista inteira em uma ScrollView, tudo desaparece.
Como habilitar a rolagem de uma Lista dentro de um espaço explicitamente limitado?
Suspeito que
List
"s" em um.grouped
estiloForm
não seja rolável por natureza . É apenas oForm
próprio estilo que é rolável.Alterar o
.sidebar
estilo de lista torna a lista rolável:Alternativamente, você pode incorporá-lo em algo
ScrollView
como isto:Sem
.containerRelativeFrame(.vertical)
, oList
terá uma altura muito pequena e será efetivamente invisível. Isso ocorre porqueList
s geralmente ocupa toda a altura disponível de seu contêiner, mas em um verticalScrollView
, a "altura disponível" é infinita.containerRelativeFrame
está aqui para garantir que a altura doList
corresponda à altura doScrollView
.Observe que isso não funciona diretamente por causa do
ScrollView
. É porque oList
não pensa mais que está em um estilo agrupadoForm
, e oList
se torna rolável novamente. A parte externaScrollView
também é rolável, mas como aList
altura corresponde exatamente à altura da visualização de rolagem, não é possível saber apenas rolando. Na verdade, há três camadas de visualizações roláveis aninhadas aqui: o formulário, oScrollView
e oList
.Nenhuma dessas soluções preserva o estilo que o
List
teria se tivesse sido colocado diretamente dentro doForm
. A julgar pela aparência desse estilo, ele não parece ter sido projetado para ser rolável.