我正在开发带有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 {
}
}
这里有一些代码可以显示我的问题。
答案 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")
}
}
}
我放入了颜色,以便您可以确切地看到工作的地方,上面的代码将使您看起来像这样:
当您对矩形所覆盖的区域感到满意时,只需将颜色替换为
,就可以将不透明度设置为非常小的值。.opacity(0.000001)
之类的。不幸的是,水龙头不能与Color.clear或hidden()修饰符一起使用。