我正在尝试将修饰符附加到 ScrollView,该修饰符仍然允许滚动并禁用所有底层按钮:
struct ContentView1: View {
var body: some View {
ScrollViewButtonDisableView()
.modifier(ScrollHitModifier())
}
}
struct ScrollViewButtonDisableView: View {
var body: some View {
ScrollView {
VStack {
ForEach(0...100, id: \.self) { buttonNumber in
Button("Press \(buttonNumber)") {
print("Button number \(buttonNumber) pressed")
}
.buttonStyle(.borderedProminent)
.font(.title)
.padding()
}
}
}
}
}
struct ScrollHitModifier: ViewModifier {
func body(content: Content) -> some View {
content
.allowsHitTesting(false)
}
}
不幸的是,结果是按钮和滚动都不再起作用。我仍然希望能够滚动。
我知道我可以将修饰符 ScrollHitModifier() 添加到 ScrollViewButtonDisableView 中的 VStack,但这违背了我正在寻找的目的。我想向整个结构添加一个修饰符,而不必将其放入结构中。 有没有办法将
.allowsHitTesting
修饰符附加到 ScrollViewButtonDisableView 并且仍然允许滚动?
您可以将虚拟
TapGesture
作为 .highPriorityGesture
添加到 ScrollView
。这会阻止对 ScrollView
内的内容进行点击手势,但仍允许执行滚动:
struct ScrollHitModifier: ViewModifier {
func body(content: Content) -> some View {
content
.highPriorityGesture(
TapGesture()
.onEnded {
// Do nothing
}
)
}
}