2

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()
    }
}
William Hu
  • 15,423
  • 11
  • 100
  • 121
  • Changing axis will recreate ScrollView (with all content) and you get lost state, so this is not the way. – Asperi Jan 07 '21 at 09:55
  • The following may help you out: https://stackoverflow.com/questions/59342384/how-to-detect-scroll-direction-programmatically-in-swiftui-scrollview – Dogan Altinbas Jan 07 '21 at 10:02

0 Answers0