Чтобы заполнить ширину экрана, вы можете добавить GeometryReader в ContentView и использовать его для установки ширины HStack. Установите там также отступы.
(Порядок заполнения и рамки важен, так же как и размещение GeometryReader для выбора ширины экрана.)
Что касается высоты, которую можно установить непосредственно для прямоугольника,У вас есть несколько вариантов, которые имеют аналогичные эффекты. Поскольку вы сказали, что список будет расти вниз, а прямоугольники находятся в ScrollView, имеет смысл установить фиксированную высоту.
struct RowView: View {
var body: some View {
Rectangle()
.foregroundColor(.blue)
.frame(height: 100)
//.frame(idealHeight: 100)
//.frame(minHeight: 100)
}
}
struct ListView: View {
var body: some View {
ScrollView(.vertical) {
VStack(spacing: 16) {
RowView()
RowView()
RowView()
}
.padding()
}
}
}
struct ContentView: View {
var body: some View {
GeometryReader { geometry in
ScrollView(.horizontal) {
HStack {
ListView()
ListView()
ListView()
}
.padding()
.frame(width: geometry.size.width)
}
}
}
}
PS Если я правильно понимаю, что вы хотите заполнить экран горизонтально ибудет увеличивать список только вниз, вам может не понадобиться горизонтальное ScrollView в ContentView. Но, если это не то, что вы пытаетесь сделать, уточните, так как это решение может не достичь того, чего вы хотите.