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

如何在SwiftUI中为Toolbar Title Menu添加自定义行?

SwiftUI 自定义 toolbarTitleMenu 行的实现方法

要实现类似苹果文件App的自定义菜单行,并把「共享文件夹」放在首行,你需要利用toolbarTitleMenu内部的Menu容器特性,用Button包裹自定义布局来实现可交互的行,同时通过Section做分组分隔。以下是修正后的实现代码:

.toolbarTitleMenu {
    // 首行:共享文件夹自定义行
    Button(action: {
        // 点击共享文件夹的逻辑
    }) {
        HStack(spacing: 12) {
            Image(systemName: "folder.badge.share")
                .foregroundColor(.blue)
            Text("共享文件夹")
                .font(.system(size: 16))
            Spacer()
            // 右侧可添加额外信息,比如数量
            Text("3")
                .font(.system(size: 14))
                .foregroundColor(.secondary)
        }
        .padding(.vertical, 8)
    }

    // 分隔线
    Divider()

    // 其他分组行
    Section {
        Button(action: {}) {
            HStack(spacing: 12) {
                Image(systemName: "doc")
                Text("我的文档")
                Spacer()
                Text("11")
                    .foregroundColor(.secondary)
            }
            .padding(.vertical, 8)
        }

        Button(action: {}) {
            HStack(spacing: 12) {
                Image(systemName: "photo")
                Text("图片")
                Spacer()
                Text("47")
                    .foregroundColor(.secondary)
            }
            .padding(.vertical, 8)
        }
    } header: {
        Text("我的项目")
            .font(.caption)
            .foregroundColor(.secondary)
            .padding(.vertical, 4)
    }

    // 另一组操作项
    Section {
        Button(action: {}) {
            Label("新建文件夹", systemImage: "folder.badge.plus")
        }
        Button(action: {}) {
            Label("排序方式", systemImage: "arrow.up.arrow.down")
        }
    }
}

关键说明:

  • 可交互行必须用Button包裹:直接放HStack或Text不会触发点击事件,且布局不会和系统菜单行对齐。用Button包裹后,既保留交互性,又能完全自定义内部布局。
  • 布局对齐技巧:通过Spacer()将左侧图标/标题和右侧信息分隔开,确保和系统菜单的布局风格一致;添加padding(.vertical)来匹配系统行的上下间距。
  • 分组与分隔:用Divider()做简单分隔,用带header的Section实现带标题的分组,和文件App的菜单结构一致。
  • 首行优先级:把「共享文件夹」的Button放在最顶部,就会成为菜单的第一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:43:20