Сначала давайте разберем массив на группы по три.
extension Array {
func dividedIntoGroups(of i: Int = 3) -> [[Element]] {
var copy = self
var res = [[Element]]()
while copy.count > i {
res.append( (0 ..< i).map { _ in copy.remove(at: 0) } )
}
res.append(copy)
return res
}
}
Изменим days
var:
var days: [String] = NextDaysView().days.dividedIntoGroups(of: 3)
Теперь давайте создадим новый код для body
:
VStack {
MenuBarView(hasMenuShown: $hasMenuShown)
ForecastButtonsView()
ForEach(days, id: \.self) { dayRow in
HStack {
ForEach(dayRow, id: \.self) { day in
SingleDaySummaryView(day: day)
}
}
}
Spacer()
}
В этом коде вы можете легко изменить количество просмотров в строке, но сделать его действительно динамичным c довольно сложно. Если вы хотите сделать это, вы можете использовать GeometryReader
, чтобы получить ширину экрана, но для вычисления количества просмотров на строку вам, конечно, также понадобится ширина одного представления, и , что ' хитрый Эта статья может содержать информацию, которая может привести к решению: https://swiftui-lab.com/communicating-with-the-view-tree-part-1/
Я не мог действительно протестировать этот код, потому что я сейчас не работаю над моей Ma c , но, надеюсь, это сработает или, по крайней мере, поможет вам!