簡體   English   中英

SwiftUI:VStack/HStack/ZStack 拖動手勢不起作用

[英]SwiftUI: VStack/HStack/ZStack drag gesture not working

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

我希望整個視圖根據offset變量(由拖動手勢改變)上下移動。 但是,即使我寫的.gesture上的修飾VStack而且即使VStack是全屏幕(得益於.frame修改)拖動動作不會對工作VStack 該手勢僅在我拖動“Hello world”文本時才有效,但如果我拖動到Text之外(但仍在全屏VStack ),則該手勢沒有響應。 有任何想法嗎? 謝謝。

實際上,有一個 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
        }
    )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM