首页 > 解决方案 > SwiftUI:VStack/HStack/ZStack 拖动手势不起作用

问题描述

我不明白为什么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
            }
        )
    }
}

我希望整个视图根据 var 上下移动offset(由拖动手势更改)。但是,即使我在.gesture上写了修饰符VStack,即使VStack是全屏(感谢.frame修饰符),拖动手势也不会在VStack. 该手势仅在我拖动“Hello world”文本时才有效,但如果我拖动到外部Text(但仍在全屏内部VStack),它会无响应。有任何想法吗?谢谢。

标签: iosswiftswiftui

解决方案


实际上,有一个 SwiftUI 功能旨在解决这个问题,而无需背景。

只需放置.contentShape(Rectangle())在您的手势修饰符之前,它将响应整个封闭矩形。:)


推荐阅读