在 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。