SwiftUI: contentOffsetの指定が可能なScrollViewを実装する

p0dee
2 min readJun 4, 2020

--

SwiftUI.ScrollViewは、UIScrollViewのようにcontentOffsetが指定できない。

またScrollViewにはisPagingEnabledの指定もできないので、ページング処理もできないので困ってしまった。

そこで、ScrollViewoffset指定について調べてみたのだが、、Stack Overflowなど、以下のようなScrollView.content.offset(…)を用いる方法が複数箇所で紹介されていた。

しかしここでのScrollView{…}.contentとは、ScrollView<Content>var content: Contentを抜き出すものなので、結果的にScrollViewがまったく使われず、意味がないと思っている。

制約多き現状のSwiftUIでは、ScrollViewに頼らず、愚直にoffsetを指定するしかないのか、、

というわけで、自前で似非ScrollViewを実装し、contentOffsetを指定可能にしてみた。

使い方は、次のようにoffsetを決定するBinding<CGFloat>を初期化時に渡すようにした。

今回は実装を単純化するためにかなり制約を設けたので、実用にはまだまだ遠い。

  • スクロール方向は水平のみ
  • コンテンツが端に到達した際のbounce処理を省略
  • contentOffset変更時のアニメーションは無効(アニメーションの有無指定をどのように実現するべきか考え中)
  • indicatorの表示を省略
  • ページング処理を省略

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response