添加onTapGesture时,SwiftUI onDelete无法检测到点击

时间:2020-10-03 14:23:12

标签: ios xcode swiftui

我正在开发带有SwiftUI列表的iOS应用。我正在实现.onDelete以使用户能够删除行。但是,我发现,当我向包含列表的VStack视图中添加.onTapGesture时,当用户在向左滑动行后点击“删除”按钮时,不会调用onDelete函数。但是,当用户将行滑动到左侧以删除它时,它仍然可以工作。似乎.onTapGesture阻止了.onDelete来接收用户输入。该如何解决?

NavigationView {
    VStack(alignment: .leading) {
        List {
            ForEach(things) { thing in
                Text(thing)
            }
            .onDelete(perform: { indexSet in
                things.remove(atOffsets: indexSet)
            })
        }
        .listStyle(SidebarListStyle())
        }
    .onTapGesture {
    }
}

这里有一些代码可以显示我的问题。

1 个答案:

答案 0 :(得分:0)

这可能是没有用的,而且很hacky,但是...如果您必须具有可轻按的区域,则可以将所有内容放置在ZStack中,然后将随机视图放在List上,然后使其成为可轻触的。然后,您可以设置大量的填充以释放将点击删除按钮的区域,如下所示:

        NavigationView {
        ZStack {
            List {
                ForEach(things, id: \.self) { thing in
                    Text(thing)
                    }
                        .onDelete(perform: { indexSet in
                            things.remove(atOffsets: indexSet)
                        })
                    }
                        .zIndex(2)
                        .listStyle(SidebarListStyle())
            
                Rectangle()
                    .zIndex(3)
                    .fill(Color.red)
                    .padding(.trailing, 80)
                    .allowsHitTesting(true)
                    .onTapGesture {
                        print("Blocking you")
                    }
                }
        }

我放入了颜色,以便您可以确切地看到工作的地方,上面的代码将使您看起来像这样:

Tappable Rectangle on List

当您对矩形所覆盖的区域感到满意时,只需将颜色替换为

,就可以将不透明度设置为非常小的值。
.opacity(0.000001)

之类的。不幸的是,水龙头不能与Color.clear或hidden()修饰符一起使用。