Adding Subtitles to Navigation Bar in SwiftUI


Greetings, traveler!

Starting with iOS 26, SwiftUI introduces a way to add subtitles to navigation bar titles. It’s done through a new view modifier:
.navigationSubtitle(_:).

This modifier lets you add a secondary line of text under the main navigation title, using the same NavigationStack or NavigationSplitView structure you already use.

How It Works

The navigationSubtitle(_:) modifier is applied to the content of a navigation destination. It works alongside .navigationTitle(_:), not instead of it.

Here’s the simplest use case:

struct ContentView: View {
    var body: some View {
        NavigationStack {
           Text("Hello!")
                .navigationTitle("Title")
                .navigationSubtitle("Subtitle")
        }
    }
}

The subtitle appears directly below the title in the navigation bar—same size, same alignment, but visually distinct. It stays in place as you scroll, and there’s no need to tweak the layout manually.

Where It Works

The modifier is available on iOS 26+, iPadOS 26.0+, Mac Catalyst 14.0+, macOS 11.0+. It requires that the view is inside a navigation container—either NavigationStack, NavigationSplitView, or their equivalents in the relevant platform.

Notes and Limitations

There’s no built-in support yet for changing the font or styling of the subtitle. It uses the system’s default appearance. That might change in future versions, but for now, it’s meant to stay consistent with native navigation UI. If you need a custom design, you can use ToolBarItem(palecement: .principal) {}

struct ContentView: View {
    var body: some View {
        NavigationStack {
           Text("Hello!")
                .toolbar {
                    ToolbarItem(placement: .principal) {
                        VStack {
                            Text("Title")
                                .fontWeight(.semibold)
                            
                            Text("Subtitle")
                                .font(.caption)
                                .foregroundStyle(.secondary)
                        }
                    }
                }
        }
    }
}

Also, navigationSubtitle(_:) must be used in views that already define a navigation title. If there’s no .navigationTitle(), the subtitle won’t appear.

Final Thoughts

It’s a small addition, but a useful one. If your navigation UI needs a bit more context—like showing a date, a location, or a short note—it now takes one line of code.