// 1. Set up adapative items (repeat, with min/max width), then add spacing as second argument to GridItem: var columns = [GridItem(.adaptive(minimum: 240, maximum: 420), spacing: spacing)] var body: some View { VStack { ScrollView { LazyVGrid(columns: columns, spacing: spacing) { // 4. also add spacing here (between rows) ForEach(document.state.cards) { card in // 2. Item, then with heights that take full width + some fixed height: .frame(maxWidth: .infinity) .frame(height: 480) .padding() .background(.white) .cornerRadius(8) } }.padding(spacing) // 3. Add paddding OUTSIDE the grid