実装するもの
SwiftUIのScrollViewは、コンテンツのオフセット量(スクロール量)を指定することができないため、上記のような、スクロールが連動するようなUIを実装できませんでした。
そこで、UIScrollViewを使用することで、目的の実装が可能でした。
実装イメージ
- UIViewController:UIScrollViewの親View。レイアウト周りの処理も実行
- UIScrollView:スクロール可能にする
- UIStackView:スクロール可能な方向を決定する(これがないと、スクロールが引っ掛かるような挙動になる)
- UIHostingController:SwiftUIのViewを表示するためのView
最終的には、UIViewControllerRepresentableを経由させて、UIViewControllerをSwiftUI側から呼び出します。この際に、ScrollViewのコンテンツになるViewを引数として渡します。
最終的なソースコードのリンクを添付します。 I created Sync ScrollableView in SwiftUI · GitHub
また、このScrollViewを使って、スクロール時にヘッダーを固定できる表のUIを作成しました(元々このために作った) 上記のリンクに、サンプルコードを載せています。