You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求详情视图集成NavigationStack的可用NavigationSplitView实现方案

求可正常运行的、详情视图集成NavigationStack的NavigationSplitView实现

有没有人能提供一个可正常运行的、详情视图集成了NavigationStack的NavigationSplitView实现?无论怎么配置,复杂的三列NavigationSplitView搭配NavigationStack总会出现崩溃或者工作流不一致的问题,具体场景如下:

  • 侧边栏选择决定内容栏展示的内容(或功能)
  • 当前选中的内容(或功能)可控制详情栏的内容
  • 详情栏需支持导航,且navigationDestinations依赖各功能(选中的内容),无法统一注册至单个根节点

我已经尝试了几种方案,但都存在问题:

基础结构代码

@State var sideBar: SideBar?
@State var content: Content?
NavigationSplitView(
    sidebar: {
        List(sidebar) { ... }
    },
    content: {
        switch sidebar { ... }
    },
    detail: {
        XXX what to put here?
    }
).navigationSplitViewStyle(.balanced)

每个侧边栏对应一组专属路由,因此我在详情栏尝试了多种配置:

方案1:详情栏内根据侧边栏切换NavigationStack

// 此方案无效,NavigationStack无法被完全移除或重建
// 它与Scene绑定,切换侧边栏时会崩溃
detail: {
    switch sidebar {
    case .a:
        NavigationStack {
            View()
            .navigationDestination(...
        }
    }
}

方案2:绑定navigationPath的NavigationStack

// 切换侧边栏前清空navigationPath,但仍无法控制详情栏内的NavigationStack,无任何效果
detail: {
    switch sidebar {
    case .a:
        NavigationStack(navigationPath) {
            View()
            .navigationDestination(...
        }
    }
}

方案3:详情栏放空NavigationStack,内容栏注册导航目标

// 此方案可运行,但切换侧边栏时偶尔崩溃,或因导航目标不可用显示警告三角
content: {
    switch sidebar {
    case .a:
        RootView()
            .navigationDestination(...)
    }
},
detail: {
    NavigationStack { }
}

方案4:绑定navigationPath的空NavigationStack

// 尝试切换前清空路径,同样无效
content: {
    switch sidebar {
    case .a:
        RootView()
            .navigationDestination(...)
    }
},
detail: {
    NavigationStack(navigationPath) { }
}

内容的提问来源于stack exchange,提问作者GeorgeJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:43:21