Reload section of UICollectionView and preserve scroll position
If you are OK with doing it without any animation I would do as follows: start with disabling animations UIView.setAnimationsEnabled(false) before inserting a new item (cell), store the value of visible rect for the selected cell let selectedCell = collectionView.cellForItem(at: indexPath) let visibleRect = collectionView.convert(collectionView.bounds, to: selectedCell) perform the insertion and when it's finished, check what is the new visible rect for the selected cell, compare it to the old value and add their difference to collectionView's contentOffset.