ios - SwiftUI Horizontal ScrollView onTapGesture 在它后面的垂直滚动视图上注册点击
问题描述
当我从垂直滚动视图(ForEach)滚动项目并点击水平视图中的项目时,我在 VStack 中有一个水平滚动视图(ForEach)和垂直滚动视图(ForEach),然后执行来自水平视图的点击手势而不是来自垂直的点击手势看法。
这是我的代码:
//
// TestView.swift
// iOS
//
//
import SwiftUI
struct TestView: View {
@State var searchTerm = ""
var body: some View {
VStack {
TextField("Search",text: $searchTerm)
.padding()
.background(
RoundedRectangle(cornerRadius:15).fill(Color.yellow)
)
.padding()
ScrollView(.horizontal){
HStack{
ForEach(1..<100){ index in
VStack {
Image(systemName: "swift")
.resizable()
.scaledToFit()
.padding()
.frame(width: 100, height: 100, alignment: .center)
.background(Color.gray)
.clipShape(Circle())
Text("item \(index)")
}
.onTapGesture{
print("horizontal list item tapped")
}
}
}
}
ScrollView {
VStack {
ForEach(1..<100) { index in
HStack {
Image(systemName: "swift")
.resizable()
.scaledToFit()
.frame(width: 50, height: 50, alignment: .center)
Text("vertical list item : \(index)")
Spacer()
}
.contentShape(Rectangle())
.onTapGesture{
print("vertical list item \(index) tapped")
}
}
.padding(.all,5)
.background(
RoundedRectangle(cornerRadius:15).fill(Color.gray)
)
.padding(.all,5)
}
}
}
.animation(.easeIn(duration: 10))
}
}
struct TestView_Previews: PreviewProvider {
static var previews: some View {
TestView()
}
}
仅供参考:用列表代替垂直滚动视图修复了点击手势,但我想要滚动视图,因为我想使用 ScrollViewReader 滚动垂直列表项作为下一步
解决方案
解决方案是为两个滚动视图添加剪辑的内容形状,例如
ScrollView(.horizontal){
// .. content here
}.contentShape(Rectangle())
.clipped()
ScrollView {
// .. content here
}.contentShape(Rectangle())
.clipped()
使用 Xcode 12 / iOS 14 测试
推荐阅读
- php - 将 Woocommerce 结帐中的自定义值保存为自定义订单元数据
- shell - curl 更改 multipart/form-data 路径参数
- r - 过滤完全相同的字符串返回 0
- windows-10 - 在注册表中使用 DelegateExecute 键
- python - 使用 Pandas 将字符串旋转到更多列
- c# - 如何在保存的备份文件中添加时间戳
- cytoscape.js - 如何获取我拖放要拖动的节点的节点的 id
- java - Quarkus 和 Thorntail 有什么区别?
- php - PHP:如何检查 session_start 是否会阻塞或超时
- amazon-web-services - 在 AWS Lambda 上,如何替换标准的 libstdc++.so.6