title: Snap to edge in horizontal scroll with Swift UI?
body: <p>How to snap a list to edge on scrolling / dragging horizontally in SwiftUI scroll view?</p>
  
  <pre><code>struct RowView: View {
      var post: Post
      var body: some View {
          GeometryReader { geometry in
              VStack {
                  Text(self.post.title)
                  Text(self.post.description)
              }.frame(width: geometry.size.width, height: 200)
              //.border(Color(#colorLiteral(red: 0.1764705926, green: 0.01176470611, blue: 0.5607843399, alpha: 1)))
              .background(Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)))
              .cornerRadius(10, antialiased: true)
              .padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
          }
      }
  }
  </code></pre>
  
  <p>The <code>ListView</code>:</p>
  
  <pre><code>struct ListView: View {
      var n: Int
      @State var posts = [Post(id: UUID(), title: "1", description: "11"),
                          Post(id: UUID(), title: "2", description: "22"),
                          Post(id: UUID(), title: "3", description: "33")]
  
      var body: some View {
          GeometryReader { geometry in
              ScrollView {
                  ForEach(0..&lt;self.n) { n in
                      RowView(post: self.posts[0])
                      //.border(Color(#colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)))
                      .frame(width: geometry.size.width, height: 200)
                  }
              }
          }
      }
  }
  </code></pre>
  
  <p>The main view, <code>ContentView</code>:</p>
  
  <pre><code>struct ContentView: View {
      init() {
          initGlobalStyles()
      }
  
      func initGlobalStyles() {
          UITableView.appearance().separatorColor = .clear
      }
  
      var body: some View {
          GeometryReader { geometry in
              NavigationView {
                  ScrollView(.horizontal) {
                      HStack {
                          ForEach(0..&lt;3) { _ in
                              ListView(n: 1000)  // crashes
                                  .frame(width: geometry.size.width - 60)
                          }
                      }.padding(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 0))
                  }.gesture(DragGesture().onEnded({ value in
                      print("drag end: \(value)")  // not printing
                  }))
              }
          }
      }
  }
  </code></pre>
  
  <p>I have added <code>DragGesture().onEnded()</code> to the scroll view but it's not getting called on drag end.</p>