首页 > 解决方案 > 具有 10 多个项目的 SwiftUI 菜单按钮

问题描述

我有一个 SwiftUI MenuButton 可以很好地处理 10 个或更少的项目:

struct ContentView: View {
    var body: some View {
        MenuButton("My Button") {
            Button("A") { }
            Button("B") { }
            Button("C") { }
            Button("D") { }
            Button("E") { }
            Button("F") { }
            Button("G") { }
            Button("H") { }
            Button("I") { }
            Button("J") { }
        }
    }
}

但是,当添加第 11 个项目时,它不会编译,因为 SwiftUI 将组的大小限制为 10。对于普通组(如 a VStack),我只会将一些项目包装在 aGroupSection中,但这会破坏MenuButton.

将前 5 个元素包装在 a 中Group

包裹在一组

将前 5 个元素包装在 a 中Section

包裹在一个部分

将前 5 个元素包裹在 a 中VStack(间距很好,但整个组可以一起选择):

包装在 vstack 中

这样做的正确方法是什么?

标签: macosswiftui

解决方案


这是一个解决方案 - 您可以保留一系列项目来配置每个菜单项按钮。使用 Xcode 11.4 测试。

演示

struct TestLongMenuButton: View {
    let actions = ["A","B","C","D","E","F","G","H","I","J","K","L"]

    var body: some View {
        MenuButton("My Button") {
            ForEach(actions, id: \.self) { action in
                Button(action) { }
            }
        }
    }
}

推荐阅读