我不明白为什么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
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
我希望整个视图根据offset
var上下移动(由拖动手势改变)。但是,即使我写.gesture
上的修饰VStack
,甚至如果VStack
是全屏幕(得益于.frame
修改)拖动动作将不会在工作VStack
。该手势仅在我拖动“Hello world”文本时有效,但如果我拖动到外部Text
(但仍在全屏内部VStack
)则无响应。有任何想法吗?谢谢。
Ant*_*ton 16
实际上,有一个 SwiftUI 功能旨在解决这个问题,而无需背景。
只需放置.contentShape(Rectangle())
在您的手势修改器之前,它就会响应整个封闭矩形。:)
你的容器是透明的。透明的东西不处理事件。所以,添加一些背景,就像下面的演示一样,一切正常。
var body: some View {
VStack {
Text("Hello World!")
}
.frame(width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
.edgesIgnoringSafeArea(.all)
.background(Color.white)
.offset(y: offset.height)
.gesture(DragGesture()
.onChanged { val in
self.offset = val.translation
}
.onEnded { val in
self.offset = .zero
}
)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2717 次 |
最近记录: |