SwiftUI ScrollView detect direction

Viewed 352

I have many rows and columns in one scrollView. I want to scroll to one direction at one time. That is when swipe vertically then disable horizontally, vice versa.

When I set:

ScrollView(.vertical) {}

or

ScrollView(.horizontal) {}

separately, the result is what I need.

So my idea is detecting the gesture direction scrollVertically

ScrollView( scrollVertically ? . vertical : .horizontal ) {}

Then should works. Is it possible in SwiftUI or other solutions? Thanks.

Test Code

import SwiftUI

struct ContentView: View {

    var body: some View {

        GeometryReader(content: { geometry in
            ScrollView([.horizontal]) {
                VStack(spacing: 0, content: {
                    ForEach(0..<30, id: \.self) { value1 in
                        HStack(spacing: 0) {
                            ForEach(0..<30, id: \.self) { value2 in
                                Text("\(value1) - \(value2)").background(Color.red)
                                    .frame(width: 100, height: 40)
                            }
                        }.padding(EdgeInsets())
                    }
                })
            }.background(Color.yellow)
        })

    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
0 Answers
Related