gpt4 book ai didi

ios - SwiftUI Horizo​​ntal ScrollView onTapGesture 在它后面的垂直 ScrollView 上注册点击

转载 作者:行者123 更新时间:2023-12-01 21:28:24 24 4
gpt4 key购买 nike

当我从垂直 ScrollView (ForEach)滚动项目并点击水平 View 中的项目时,我在 VStack 中有一个水平 ScrollView (ForEach)和垂直 ScrollView (ForEach),然后执行来自水平 View 的点击手势而不是来自垂直的点击手势看法。
这是我的代码:

//
// 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()
}
}

before scrolling
After scrolling
仅供引用:用列表代替垂直 ScrollView 修复了点击手势,但我想要 ScrollView ,因为我想使用 ScrollViewReader 滚动垂直列表项作为下一步

最佳答案

解决方案是为两个 ScrollView 添加剪辑的内容形状,例如

ScrollView(.horizontal){
// .. content here
}.contentShape(Rectangle())
.clipped()

ScrollView {
// .. content here
}.contentShape(Rectangle())
.clipped()
使用 Xcode 12/iOS 14 测试

关于ios - SwiftUI Horizo​​ntal ScrollView onTapGesture 在它后面的垂直 ScrollView 上注册点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63216754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com