在 UINavigationController
之上实现的适用于 iOS 14 和 15 的 NavigationStack
。对于 iOS 16 或更高版本,反向移植仅桥接至现有的 SwiftUI API。
NavigationPath
,包括可编码表示View.navigationDestination()
、View.navigationDestination(isPresented:destination:)
和 View.navigationDestination(item:destination:)
NavigationLink
支持通过 Swift Package Manager 安装。使用 https://github.com/lm/navigation-stack-backport
作为依赖 URL。有关如何在 Xcode 中添加依赖关系的更多信息,请参阅 https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app 或者在您的 Package.swift 中添加依赖关系 .package(url: "https://github.com/lm/navigation-stack-backport", from: "1.1.0")
用法与 iOS 16 上的 SwiftUI 的 NavigationStack
相同,只需在 NavigationStack
和其他类型前加上 NavigationStackBackport.
前缀,或者从 NavigationStackBackport
包中导入精确的类型。对于 iOS 16 中引入的视图修饰符,请使用 backport.
前缀,例如 .backport.navigationDestination(for: …)
。
import NavigationStackBackport
struct ContentView: View {
@State private var navigationPath = NavigationStackBackport.NavigationPath()
var body: some View {
NavigationStackBackport.NavigationStack(path: $navigationPath) {
Button("Push") {
navigationPath.append("Hello World")
}
.backport.navigationDestination(for: String.self) { value in
Image(systemName: "globe")
.navigationTitle(value) // use available SwiftUI's modifiers
}
}
}
}
更多示例请参见本仓库中的 TestApp
。