【问题标题】:Adding contextMenu to a Button within a List prevents default Button functionality将 contextMenu 添加到列表中的按钮会阻止默认按钮功能
【发布时间】:2020-09-18 05:31:13
【问题描述】:

我正在尝试创建一个列表,其中包含在点击/单击时发生的操作并支持上下文菜单。

按钮在列表外 (#1) 时支持 contextMenu,但在列表内 (#2) 时,不再识别点击,尽管 contextMenu 仍然有效。这是故意的吗?

struct ContextMenu: View {
    @State var on = false

    var button: some View {
        Button(action: { self.on.toggle() }) {
            Text("Toggle")
        }
    }

    var body: some View {
        VStack {
            Text(on ? "on" : "off")

            // #1: works for both tap and context
            button.contextMenu {
                button
            }

            // #2: tap on button no longer works
            List {
                button.contextMenu {
                    button
                }
            }
        }
    }
}

我也尝试将.buttonStyle(BorderlessButtonStyle() 添加到按钮。这将启用点击,但仅限于文本,而不是整行。

【问题讨论】:

    标签: swiftui mac-catalyst


    【解决方案1】:

    实际上这是苹果的一个问题......同时这里是一个可能的解决方案。使用 Xcode 11.4 测试

    List {
        button
            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)
            .contentShape(Rectangle())
            .contextMenu {
                button
            }.onTapGesture {
                self.on.toggle()
            }
    }
    

    如果您想在行点击时突出显示,则需要应用自定义 ButtonStyle。例如你可以考虑Custom Button in SwiftUI List中的解决方案

    【讨论】:

    • 谢谢 - 这是一个有用的解决方法!我也为 Apple 创建了反馈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    相关资源
    最近更新 更多