如何在 watchOS 7 及更低版本上使用 navigationBarTitleDisplayMode?

How can I use navigationBarTitleDisplayMode on watchOS 7 and below?

当我尝试在针对 watchOS 6 的项目中使用 navigationBarTitleDisplayMode 时,出现此错误:

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

如何在 watchOS 的早期版本中使用它?我知道那里不会有效果,因为样式不存在,我只是想规避错误。

您可以使用 ViewBuilder 扩展来实现:

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

用法:

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