I think I came up with something that seems to work but not sure if this is a good way to do this (I also changed from ScrollView to Flickable because I saw online that it is better suited for touch devices.)

Qt Code:
  1. Flickable {
  2.  
  3. id: scroller
  4. anchors.fill: parent
  5. contentHeight: main.height
  6. contentWidth: main.width
  7. GridLayout {
  8. id: main
  9. height: scroller.width > 600 ? scroller.height : children.length * 800
  10. width: scroller.width
  11.  
  12. columns: 2
  13.  
  14. states: [
  15. State {
  16. when: root.width <= 600
  17. PropertyChanges {target: left; Layout.row: 1}
  18. PropertyChanges {target: right; Layout.row: 0}
  19. },
  20. State {
  21. when: root.width > 600
  22. PropertyChanges {target: left; Layout.column: 0}
  23. PropertyChanges {target: right; Layout.column: 1}
  24. }
  25. ]
To copy to clipboard, switch view to plain text mode 

Basically I set the GridLayout's height to the height of the scroller or to a very high height (800 * children.length) if the width gets narrower (<= 600 in this case).

Is there a better way to do it or is it "good enough"?