How can I use navigationBarTitleDisplayMode on watchOS 7 and below?

Viewed 302

When I try to use navigationBarTitleDisplayMode in my project targeting watchOS 6, I get this error:

'navigationBarTitleDisplayMode' is only available in application extensions for watchOS 8.0 or newer

How can I use it in earlier versions of watchOS? I know it won't have an effect there, because the style doesn't exist, I just want to circumvent the error.

1 Answers

You can do it with a ViewBuilder extension:

extension View {
    @ViewBuilder
    func navBarTitleDisplayMode(_ mode: NavigationBarItem.TitleDisplayMode) -> some View {
        if #available(watchOSApplicationExtension 8.0, *) {
            self
                .navigationBarTitleDisplayMode(mode)
        } else {
            self
        }
    }
}

Usage:

someView
    .navigationBarTitle("WatchFunk") // Using this for watchOS 6 compatibility.
                                     // Use navigationTitle when targeting
                                     // watchOS 7 and above.
    .navBarTitleDisplayMode(.inline)
Related