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

如何在VisionOS的SwiftUI应用左侧添加菜单?

如何在VisionOS的SwiftUI应用左侧添加菜单?

嘿,我刚好踩过这个坑!你用NavigationView没效果太正常了——VisionOS的导航组件逻辑和iOS有差异,它更推荐用NavigationSplitView来实现左侧侧边栏菜单,比TabView更贴合你要的交互场景哦!

先给你说为啥NavigationView不行:VisionOS里的NavigationView是针对层级式的页面跳转(比如从列表点进详情),不是用来做侧边栏+主内容的分栏布局的。而NavigationSplitView是苹果专门为多窗口、多空间场景设计的分栏组件,天生适配VisionOS的交互逻辑。

给你贴个完整的示例代码,你直接就能跑起来看效果:

struct VisionSidebarView: View {
    // 记录当前选中的菜单项
    @State private var selectedMenu: String? = "首页"
    
    // 菜单选项列表
    private let menuItems = ["首页", "我的收藏", "设置", "帮助中心"]
    
    var body: some View {
        NavigationSplitView {
            // 左侧侧边栏菜单区域
            List(menuItems, id: \.self, selection: $selectedMenu) { item in
                NavigationLink(value: item) {
                    Text(item)
                }
            }
            .navigationTitle("菜单")
        } detail: {
            // 右侧主内容区域,根据选中项切换内容
            if let selectedItem = selectedMenu {
                Text("当前展示的是「\(selectedItem)」页面")
                    .navigationTitle(selectedItem)
            } else {
                Text("请选择一个菜单项")
                    .navigationTitle("欢迎")
            }
        }
        // 可选:调整侧边栏的显示样式,.balanced是默认,.compact会让侧边栏默认折叠
        .navigationSplitViewStyle(.balanced)
    }
}

要是你想给菜单加图标、分组,让它更美观,也很简单,修改侧边栏的List部分就行:

List(selection: $selectedMenu) {
    Section("核心功能") {
        NavigationLink(value: "首页") {
            Label("首页", systemImage: "house")
        }
        NavigationLink(value: "我的收藏") {
            Label("我的收藏", systemImage: "star")
        }
    }
    
    Section("辅助设置") {
        NavigationLink(value: "设置") {
            Label("设置", systemImage: "gear")
        }
        NavigationLink(value: "帮助中心") {
            Label("帮助中心", systemImage: "questionmark.circle")
        }
    }
}

至于你提到的TabView,它在VisionOS里主要是用来做同一层级的标签页切换,通常会显示在窗口的底部或者顶部,和你要的左侧固定菜单场景不太匹配,所以不建议用它来实现这个需求。

这个方案的好处是完全贴合VisionOS的系统交互规范,侧边栏会自动适配不同的窗口大小和空间场景——比如全屏时固定显示,小窗口时可以通过拖拽边缘或者点击按钮展开,用户体验会很顺畅。

备注:内容来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:39:34