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.
Reloading/inserting Dynamic Height cells and keeping Scroll position
For an upcoming app I had to insert Dynamic Height cells while keeping the tableView offset -scrolling position- constant. This would typically be a trivial issue, but given that when using Dynamic Height cells nor the contentSize nor the offset can be trusted it's a bit more tricky than it seems...