iOS 15/16 的 SwiftUI NavigationView 与 NavigationStack

Ale*_*nnd 6 xcode navigationview swiftui ios15 ios16

我正在尝试使我的 iPhone 应用程序(针对 iOS 15 及更高版本)与 iOS 16 完全兼容,但没有成功!

我不知道如何在同一段代码中同时支持NavigationViewiOS 15 和iOS 16。NavigationStack

Xcode 不接受上面的代码:

if #available(iOS 16, *) {
   NavigationStack {
} else {
   NavigationView {
}
Run Code Online (Sandbox Code Playgroud)

来自:SwiftUI NavigationView/Stack(如果可用)iOS 15/16

我想按照@timmy 的建议创建自定义容器将是唯一的解决方案。但我不知道如何继续。

那有什么办法解决呢?

hal*_*llo 14

就我个人而言,除非我以 iOS 16+ 为目标,否则我不会使用NavigationStack,但如果你想这样做,你可以制作自己的导航包装器

struct MyNavigation<Content>: View where Content: View {
    @ViewBuilder var content: () -> Content
    
    var body: some View {
        if #available(iOS 16, *) {
            NavigationStack(root: content)
        } else {
            NavigationView(content: content)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像你一样使用它,NavigationStack或者NavigationView在 iOS 15 或更早版本上它会使用NavigationView,在 iOS 16 或更高版本上它会使用NavigationStack

Xcode 不接受您的代码,因为它无效。在同一个块中不能有{没有 a 的情况。}

  • 好吧,我最终将您的代码片段使用到一个 View.swift 文件中,并在每个其他文件上引用它(结构名称)。它就像一个魅力!另外,这是我第一次在我的应用程序上使用自定义视图,我很高兴。非常感谢你@hallo。 (2认同)