SwiftUI-无法将视图拖到ScrollView之外

时间:2020-02-27 19:02:10

标签: ios swiftui

这是我的布局的非常简化的版本。我有一个可以拖动的文本视图...

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之外?

1 个答案:

答案 0 :(得分:0)

为什么会这样?

您拖动,只是看不到它,因为ScrollView剪切了它的内容视图。默认情况下,堆栈没有。如果将.clipped()添加到底部VStack,您将看到相同的内容。

有什么方法可以将这些视图拖到 ScrollView?

解决方案可能正在使用ZStack。说一下拖动,您可以在ScrollView中隐藏一个视图,并在相同的全局位置中显示相同的ScrollView,因此在视觉上它的行为与拖动原始视图相同。