Skip to main content

How to group views visually using GroupBox

About 2 minSwiftSwiftUIArticle(s)bloghackingwithswift.comcrashcourseswiftswiftuixcodeappstore

How to group views visually using GroupBox 관련

SwiftUI by Example

Back to Home

How to group views visually using GroupBox | SwiftUI by Example

How to group views visually using GroupBox

Updated for Xcode 15

Updated in iOS 15

SwiftUI's GroupBox view groups views together and places a light background color behind them so they stand out. You can optionally also include a header to make group titles, if you need to.

By default GroupBox with align its views vertically. For example, this will show three text views one above the other:

GroupBox {
    Text("Your account")
        .font(.headline)
    Text("Username: tswift89")
    Text("City: Nashville")
}

Download this as an Xcode projectopen in new window

Three lines of text centered in a gray rounded rectangle. The top line is bolded.
Three lines of text centered in a gray rounded rectangle. The top line is bolded.

If you want to control that layout, such as changing axis or adjusting the alignment, create a stack yourself:

GroupBox {
    VStack(alignment: .leading) {
        Text("Your account")
            .font(.headline)
        Text("Username: tswift89")
        Text("City: Nashville")
    }
}

Download this as an Xcode projectopen in new window

Three lines of text left-aligned in a gray rounded rectangle. The top line is bolded.
Three lines of text left-aligned in a gray rounded rectangle. The top line is bolded.

One real power feature of GroupBox is that if you nest them they will automatically adapt their colors so they are neatly distinguished:

GroupBox {
    Text("Outer Content")

    GroupBox {
        Text("Middle Content")

        GroupBox {
            Text("Inner Content")
        }
    }
}

Download this as an Xcode projectopen in new window

Three concentric rounded rectangles, each containing a line of text, and the inner rectangle(s).
Three concentric rounded rectangles, each containing a line of text, and the inner rectangle(s).

This effect works just as well – if not better! – in dark mode.

Like I said, you can add titles to your GroupBox and although it looks okay on macOS it doesn't look nice at all on iOS:

GroupBox("Your account") {
    VStack(alignment: .leading) {
        Text("Username: tswift89")
        Text("City: Nashville")
    }
}

Download this as an Xcode projectopen in new window

A macOS window containing “Your account” above a two lines of text in a rounded rectangle. Beside it is an iPhone with similar contents consuming horizontal space, resulting in a visual imbalance.
A macOS window containing “Your account” above a two lines of text in a rounded rectangle. Beside it is an iPhone with similar contents consuming horizontal space, resulting in a visual imbalance.
Similar solutions…
How to group views together with ControlGroup | SwiftUI by Example

How to group views together with ControlGroup
How to group views together | SwiftUI by Example

How to group views together
How to control spacing around individual views using padding | SwiftUI by Example

How to control spacing around individual views using padding
How to create multi-column lists using Table | SwiftUI by Example

How to create multi-column lists using Table
How to create views in a loop using ForEach | SwiftUI by Example

How to create views in a loop using ForEach

이찬희 (MarkiiimarK)
Never Stop Learning.