繁体   English   中英

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

[英]SwiftUI onDelete cannot detect tap when onTapGesture is added

我正在开发一个带有 SwiftUI 列表的 iOS 应用程序。 我正在实施 .onDelete 以使用户能够删除行。 但是,我发现当我将 .onTapGesture 添加到包含列表的 VStack 视图时,当用户在向左滑动行后点击“删除”按钮时,不会调用 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 {
    }
}

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

这可能是无用的,而且非常笨拙,但是...如果您必须有一个可点击的区域,您可以将所有内容放在 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() 修饰符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM