如何在SwiftUI中为Toolbar Title Menu添加自定义行?
要实现类似苹果文件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
相关产品推荐
相关产品推荐

