Les différents *Stack
vont essayer de se réduire à la plus petite taille possible pour contenir leurs vues enfant. Si la vue enfant a une taille idéale, alors la fonction *Stack
ne s'étendra pas pour remplir l'écran. Ce problème peut être résolu en plaçant chaque enfant au-dessus d'un écran transparent Rectangle
dans un ZStack
car un Shape
se développera autant que possible. Un moyen pratique d'y parvenir est d'utiliser une extension sur View
:
extension View {
func inExpandingRectangle() -> some View {
ZStack {
Rectangle()
.fill(Color.clear)
self
}
}
}
Vous pouvez alors l'appeler comme ceci :
struct ContentView: View {
var data = ["View", "View", "View"]
var body: some View {
VStack {
// This will be as small as possible to fit the items
HStack {
ForEach(data, id: \.self) { item in
Text(item)
.border(Color.red)
}
}
// Each item's invisible Rectangle forces it to expand
// The .fixedSize modifier prevents expansion in the vertical direction
HStack {
ForEach(data, id: \.self) { item in
Text(item)
.inExpandingRectangle()
.fixedSize(horizontal: false, vertical: true)
.border(Color.red)
}
}
}
}
}
Vous pouvez régler l'espacement sur le HStack
comme souhaité.