我不明白为什么DragGesture
在VStack/HStack/ZStack上不起作用。考虑下面的简单示例:
struct ContentView: View {
@State private var offset = CGSize.zero
var body: some View {
VStack {
Text("Hello World!")
}
.frame(width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
.edgesIgnoringSafeArea(.all)
.offset(y: offset.height)
.gesture(DragGesture()
.onChanged { val in
self.offset = val.translation
}
.onEnded { val in
self.offset = .zero
}
)
}
}
我希望整个 View 根据
offset
var(由拖动手势更改)上下移动。但是,即使我在.gesture
上写了VStack
修饰符,即使VStack
是全屏显示(由于.frame
修饰符),拖动手势也不会在VStack
上起作用。仅当我拖动“Hello world”文本时该手势才有效,但是如果我将其拖动到Text
之外(但仍在全屏VStack
内),则该手势将无响应。有任何想法吗?谢谢。 最佳答案
实际上,有一个SwiftUI功能旨在无需背景即可解决该问题。
只需将.contentShape(Rectangle())
放在手势修饰符之前,它将响应整个封闭的矩形。 :)