UICollectionView Cellを選択後に画面内に入るようにスクロールさせる

Updated
Oct 21, 2019 3:41 PM
Created
Oct 21, 2019 3:33 PM
Tags
UIKit.frameworkSwift
Keywords

ProgrammaticallyにCellを選択状態にすると同時に、Cellを適切な場所までスクロールさせたいことは、時々ある。

UICollectionViewにはselectItemメソッドの中にscrollPositionというオプションが存在するのだが、これが

  • top
  • left
  • right
  • bottom
  • centeredVertically
  • centeredHorizontally

であり、今回必要だったのが、隠れている部分を最低限見える位置まで持ってくるというもの。 Optionには存在しないので作った。 イメージはFacebook Messengerのスタンプのグループの切り替え

UIScrollViewのscrollRectToVisibleを活用したものになる。

guard let index = dataController.snapshot.firstIndex(of: item) else {
  assertionFailure()
  return
}

let targetIndexPath = IndexPath(item: index, section: 0)

collectionView.selectItem(
  at: targetIndexPath,
  animated: false,
  scrollPosition: []
)
        
guard let attributes = collectionView.collectionViewLayout.layoutAttributesForItem(at: targetIndexPath) else {
  assertionFailure()
  return
}


collectionView.scrollRectToVisible(attributes.frame, animated: animated)