Chapters

Hide chapters

SwiftUI Cookbook

Live Edition · iOS 16.4 · Swift 5.8.1 · Xcode 14.3.1

Add a NavigationStack in SwiftUI
Written by Team Kodeco

When building an app with multiple views, it is important to have a way to navigate between them. In SwiftUI, the NavigationStack provides a simple and intuitive way to navigate between views.

To add a NavigationStack to your SwiftUI app, wrap your top-level view in a NavigationStack. Within the NavigationStack, you can add multiple views as navigation items. Each navigation item is represented as a button on the navigation bar, which the user can tap to navigate to that view.

Here’s an example of how to add a NavigationStack to your SwiftUI app:

struct ContentView: View {
  var body: some View {
    NavigationStack {
      Text("Welcome to my app!")
        .navigationTitle("Home")
        .navigationBarTitleDisplayMode(.large)
    }
  }
}

In this example, a Text view is encapsulated within a NavigationStack. The navigationTitle modifier is used to establish the text that appears on the navigation bar. The navigationBarTitleDisplayMode modifier sets the display mode of the navigation bar title, which, in this case, is set to .large.

An example of a NavigationStack in SwiftUI.
An example of a NavigationStack in SwiftUI.

To add another view as a navigation item, the .toolbar modifier can be used as follows:

struct ContentView: View {
  var body: some View {
    NavigationStack {
      VStack {
        Text("Welcome to my app!")
        NavigationLink(destination: DetailView()) {
          Text("Go to Detail View")
        }
      }
      .navigationTitle("Home")
      .navigationBarTitleDisplayMode(.large)
      .toolbar {
        ToolbarItem(placement: .navigationBarTrailing) {
          Button(action: {
            print("Settings tapped")
          }) {
            Text("Settings")
          }
        }
      }
    }
  }
}

struct DetailView: View {
  var body: some View {
    Text("This is the detail view!")
      .navigationTitle("Detail")
      .navigationBarTitleDisplayMode(.large)
  }
}

You should see the following in the preview:

An example of a NavigationStack with a detail view in SwiftUI.
An example of a NavigationStack with a detail view in SwiftUI.

In this example, we’ve incorporated a VStack with a Text view and a NavigationLink within our NavigationStack. The NavigationLink allows the user to navigate to the DetailView upon being tapped. We’ve also added a Settings button to the navigation bar using the .toolbar modifier and the ToolbarItem view.

For more details, consult the “Lists & Navigation in SwiftUI” section of this cookbook.

Have a technical question? Want to report a bug? You can ask questions and report bugs to the book authors in our official book forum here.
© 2024 Kodeco Inc.