UICollectionView
で取得する visibleCells のうち、“完全に"表示されているcellのみを抜き出してみます。
ここでの"完全に"は、cellが一切、スクロールの範囲外にはみ出ていないことを指します。
let perfectVisibleCells = collectionView.visibleCells().filter {
CGRectContainsRect(collectionView.bounds, $0.frame)
}
こうすることで、visibleCells のうち、“完全に"表示されているcellのみを抜き出すことができます。
何かしらのタイミングで、完全に表示されているcellにはこの処理を、はみ出てしまったらこの処理を、なんてことが出来そうです。
少し工夫すれば、cellの高さの半分以上はみでたら、なんていう風にもできそうです!
実は
昔、teratailで自分が回答で書いたものを再掲させて頂きました。