Grid View / SwiftUI

Sullivan De Carli
Swift Productions
Published in
3 min readMay 8, 2024

Short tutorial on how to create a structured grid View with SwiftUI

Difficulty: Beginner | Easy | Normal | Challenging

Environment : Xcode 14.3, iOS 16 & SwiftUI

Full code at the end of the article

Create new Xcode Project

Open Xcode > App template > Select the SwiftUI Life Cycle and call it GridApp

Create a Model

We will define a model struct to represent the data we want to display in our grid. For this tutorial, we will create a simple Item struct.

Go ahead and create a new swift file, call it GridView. Then, copy the code below right over the struct GridView

struct Item: Identifiable {
let id = UUID()
let name: String
}

Create a Grid View Layout

In SwiftUI, you can create a grid layout using LazyVGrid or LazyHGrid. For this tutorial, let’s use LazyVGrid to create a vertical grid.

struct GridView: View {
let items: [Item]

var body: some View {
ScrollView {
LazyVGrid(columns: [GridItem(), GridItem(), GridItem()]) {
ForEach(items) { item in
Text(item.name)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.blue)
.cornerRadius(8)
.padding(10)
}
}
.padding()
}
.navigationTitle(“Grid View”)
}
}

Preview the Grid View

Now, go back in your ContentView.swift, create some sample data and preview the grid view passing the items parameters:

struct ContentView: View {
let items = [
Item(name: “Item 1”),
Item(name: “Item 2”),
Item(name: “Item 3”),
Item(name: “Item 4”),
Item(name: “Item 5”),
Item(name: “Item 6”),
Item(name: “Item 7”),
Item(name: “Item 8”),
Item(name: “Item 9”)
]

var body: some View {
NavigationView {
GridView(items: items)
}
}
}

Adjust Grid Layout

You can adjust the number of columns in the grid by changing the columns parameter of LazyVGrid. Additionally, you can customise the appearance like the color, padding and more of the grid items.

Run your app

Build and run your SwiftUI app in the simulator or on a device to see your grid view in action.

Thanks for reading! I’m always happy to have a chat and collaborate at hello@sullivandecarli.com. Consider subscribing to enjoy unlimited access to my articles and all of Medium through my referral link.

Full code below:


// GridView
import SwiftUI

struct Item: Identifiable {
let id = UUID()
let name: String
}

struct GridView: View {
let items: [Item]

var body: some View {
ScrollView {
LazyVGrid(columns: [GridItem(), GridItem(), GridItem()]) {
ForEach(items) { item in
Text(item.name)
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.red)
.cornerRadius(6)
.padding(10)
}
}
.padding()
}
.navigationTitle("Grid View")
}
}
// ContentView 
import SwiftUI

struct ContentView: View {
let items = [
Item(name: "Item 1"),
Item(name: "Item 2"),
Item(name: "Item 3"),
Item(name: "Item 4"),
Item(name: "Item 5"),
Item(name: "Item 6"),
Item(name: "Item 7"),
Item(name: "Item 8"),
Item(name: "Item 9"),
Item(name: "Item 10"),
Item(name: "Item 11"),
Item(name: "Item 12")
]

var body: some View {
NavigationView {
GridView(items: items)
}
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}

--

--

Sullivan De Carli
Swift Productions

Consultant in iOS Dev at Deloitte. I write about Design & App development. Let’s have a chat at hello@sullivandecarli.com