UICollectionView
で、 reloadData() を呼んだ直後は、visibleCells()でCellがうまく取得できない場合があります。
collectionView.reloadData()
print(collectionView.visibleCells()) // 取れたり取れなかったり..。
そんなときは、以下のように、layoutIfNeeded()を呼んであげると、正確に取得することができます。
collectionView.reloadData()
collectionView.layoutIfNeeded()
print(collectionView.visibleCells()) // 取得できる!
同様に、 cellForItematIndexPath() でもvisibleなcellなら取得できるようになります。