🎢

UICollectionViewでページングでの指定scrollが指定できないとき

2021/09/04に公開

前提

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は同期的に実行される

setContentOffsetで指定した位置にページングされない

  • AutoLayoutが反映される前にindexを決めてしまっている
    • viewDidLayoutSubviewsの後に試してみる

その他参考になりそうなページ

【iOS14】CollectionViewのscrollToItemが機能しない場合の対処法
https://qiita.com/ktc_eng/items/26c23562975e87a0e369

Discussion