In this tutorial, the user will explore SwiftUI’s two essential UI components: LazyHGrid, designed for horizontal grids, and LazyVGrid, crafted for vertical grid layouts. These versatile tools enable the creation of various grid structures, and the ‘lazy’ attribute ensures that items are generated only when necessary, enhancing app efficiency.

SwiftUI 2.0 introduces LazyHGrid and LazyVGrid, requiring Xcode 12 for implementation. You can obtain the beta version from the Apple developer portal. Let’s dive into the steps to get started:

Setting Up Your Project

  1. Launch Xcode and either initiate a new Xcode project from the startup window or navigate to File > New > Project;
  2. In the template selector, choose iOS as the platform and select the App template under the Application section. Proceed by clicking ‘Next.’

Configuring Project Details

  1. Name your project ‘SwiftUILazyGridTutorial.’;
  2. Choose ‘SwiftUI’ as the interface, ‘SwiftUI App’ as the life cycle, and ‘Swift’ as the language;
  3. Uncheck the ‘Include Tests’ option and continue by clicking ‘Next.’;
  4. Select a suitable location on your Mac to save the project.

Previewing Your Canvas

Click ‘Resume’ in the canvas to display the project preview. If the canvas isn’t visible, access it by selecting ‘Editor > Editor and Canvas.’

Modifying ContentView.swift

In the Project navigator, locate and select ‘ContentView.swift.’ Adjust the code within the ContentView struct as follows:

struct ContentView: View {
    private var flexibleLayout = [GridItem(.flexible()), GridItem(.flexible())]
    private var fixedLayout = [GridItem(.fixed(100)), GridItem(.fixed(200))]
    private var adaptiveLayout = [GridItem(.adaptive(minimum: 100))]
    private var mixedLayout = [GridItem(.fixed(150)), GridItem(.adaptive(minimum: 50))]

    var body: some View {
        NavigationView() {
            ScrollView {
                // 1. Flexible Layout
                LazyVGrid(columns: flexibleLayout, spacing: 20) {
                // 2. Fixed Layout
                //LazyVGrid(columns: fixedLayout, spacing: 20) {
                // 3. Adaptive Layout
                //LazyVGrid(columns: adaptiveLayout, spacing: 20) {
                // 4. Mixed Layout
                //LazyVGrid(columns: mixedLayout, spacing: 20) {

                    // Display the item
                    ForEach((1...1000), id: \.self) {
                            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 50)
            .navigationTitle("Lazy Grids")

Exploring Grid Layout Options

  1. The flexible layout evenly distributes space with two columns;
  2. The fixed layout defines columns with fixed widths, displaying two columns of varying sizes;
  3. An adaptive layout utilizes minimum width to maximize row display;
  4. Mixed layouts combine various grid configurations, such as fixed and adaptive columns.


In this tutorial, users have delved into the world of SwiftUI’s Lazy Grids, specifically LazyHGrid and LazyVGrid. These powerful tools allow for the creation of dynamic grid layouts in your iOS applications, enhancing both flexibility and efficiency. By harnessing the ‘lazy’ keyword, items are generated on-demand, optimizing app performance and responsiveness. Whether you need evenly distributed columns, fixed-width columns, adaptive layouts, or a combination of these, Lazy Grids provide the versatility you require.

With SwiftUI 2.0 and Xcode 12, developers can take full advantage of these features. The beta version is readily accessible through the Apple developer portal, ensuring you stay at the forefront of iOS app development. As you continue to explore SwiftUI’s capabilities, incorporating Lazy Grids into your projects will undoubtedly open up exciting possibilities for crafting intuitive and visually appealing user interfaces. So, go ahead and experiment with these grid layouts to create stunning and responsive apps that cater to your users’ needs.

Leave a Reply