将 contextMenu 添加到列表中的按钮会阻止默认按钮功能
Adding contextMenu to a Button within a List prevents default Button functionality
我正在尝试创建一个列表,其中包含在 tap/click 上发生并支持上下文菜单的操作。
按钮在列表外 (#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()
添加到按钮。这会启用点击,但仅限于文本,而不是整行。
其实这个问题要问苹果...同时这里有一个可能的解决方案。使用 Xcode 11.4
测试
List {
button
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)
.contentShape(Rectangle())
.contextMenu {
button
}.onTapGesture {
self.on.toggle()
}
}
如果您想要在行点击时突出显示,则需要应用自定义 ButtonStyle。例如,您可以考虑
中的解决方案
我正在尝试创建一个列表,其中包含在 tap/click 上发生并支持上下文菜单的操作。
按钮在列表外 (#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()
添加到按钮。这会启用点击,但仅限于文本,而不是整行。
其实这个问题要问苹果...同时这里有一个可能的解决方案。使用 Xcode 11.4
测试List {
button
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)
.contentShape(Rectangle())
.contextMenu {
button
}.onTapGesture {
self.on.toggle()
}
}
如果您想要在行点击时突出显示,则需要应用自定义 ButtonStyle。例如,您可以考虑