🎢
UICollectionViewでページングでの指定scrollが指定できないとき
前提
UICollectionViewのscrollToItemは指定したindexにスクロールしてくれる機能だけど、正常に動作しないときにエラーを示してくれないのでめちゃくちゃ原因究明が難しい。
指定する位置にスクロールするメソッドは2つ
-
scrollToItem
メソッド- indexで表示位置を指定
-
setContentOffset
メソッド-
offset: CGPoint
で表示位置- indexからCGPointを計算できればこちらでもいい
-
collectionViewのisPagingEnabledをtrueにした際の話
CollectionViewにはプロパティisPagingEnabled: Boolがあり、trueにすることでスクロールが止まるようになる。
問題解決編
scrollToItemでスクロールしない
- dataSourceがセットされていない可能性がある
- viewDidLoadなどでdataSourceより前にscrollしようとしてないか
- Combineのsinkは同期的に実行される
- viewDidLoadなどでdataSourceより前にscrollしようとしてないか
setContentOffsetで指定した位置にページングされない
- AutoLayoutが反映される前にindexを決めてしまっている
-
viewDidLayoutSubviews
の後に試してみる
-
その他参考になりそうなページ
【iOS14】CollectionViewのscrollToItemが機能しない場合の対処法
Discussion