在 iOS16 中以编程方式推送 NavigationLink

fba*_*eff 5 swift swiftui

在以前的 iOS 版本中,我以编程方式推送了一个 NavigationLink

NavigationLink(isActive: $searched, destination: { SearchView(originalSearchPhrase: $searchedPhrase) }, label: {})
Run Code Online (Sandbox Code Playgroud)

并在我想要推送 isActive 变量时切换它。但是,在 iOS16 中,所有带有 isActive 的 NavigationLink 均已弃用。还有办法以编程方式推送 NavigationLinks 吗?

Asp*_*eri 6

我们只需要将相应的链接值推送到NavigationStack路径中即可。

演示

这是主要部分。使用 Xcode 14 / iOS 16 进行测试

    enum Dest: Hashable {
        case search, details
    }

  @State private var path: [Dest] = []

  var body: some View {
     NavigationStack(path: $path) {
        Button("Go search") { path.append(.search) }  // << here !!
        Divider()
        NavigationLink(value: Dest.search) {
            Text("Search")
        }
        .navigationDestination(for: Dest.self) {
            switch $0 {
            case .search:
                Text("Search Destination Here")
Run Code Online (Sandbox Code Playgroud)

GitHub 上的完整代码