这是我的布局的非常简化的版本。我有一个可以拖动的文本视图...
struct DragView: View {
var text:String
@State var dragAmt = CGSize.zero
var body: some View {
Text(text)
.padding(15)
.background(Color.orange)
.cornerRadius(20)
.padding(5)
.frame(width: 150, height: 60, alignment: .leading)
.offset(dragAmt)
.gesture(
DragGesture(coordinateSpace: .global)
.onChanged {
self.dragAmt = CGSize(width: $0.translation.width, height: $0.translation.height)
}
.onEnded {_ in
self.dragAmt = CGSize.zero
})
}
}
然后我像这样排列这些视图:
struct ContentView: View {
var body: some View {
HStack {
ScrollView {
VStack {
DragView(text: "hi")
DragView(text: "hi")
DragView(text: "hi")
}
}
Divider()
VStack {
DragView(text: "hi")
DragView(text: "hi")
DragView(text: "hi")
}
}
}
}
不在ScrollView中的视图按预期方式工作,我可以在整个屏幕上拖动它们。但是,如果将ScrollView中的视图带到ScrollView的范围之外,它们将消失。
为什么会这样?有什么方法可以将这些视图拖动到ScrollView之外?
答案 0 :(得分:0)
为什么会这样?
您拖动,只是看不到它,因为ScrollView
剪切了它的内容视图。默认情况下,堆栈没有。如果将.clipped()
添加到底部VStack
,您将看到相同的内容。
有什么方法可以将这些视图拖到 ScrollView?
解决方案可能正在使用ZStack。说一下拖动,您可以在ScrollView中隐藏一个视图,并在相同的全局位置中显示相同的ScrollView,因此在视觉上它的行为与拖动原始视图相同。