UICollectionView content Offset después de la rotación del dispositivo

Lo que estoy tratando de hacer:

En la aplicación Photo de Apple, si gira el dispositivo mientras se desplaza a un desplazamiento arbitrario, la misma celda que estaba en el centro de antemano terminaría en el centro después de la rotación.

Estoy tratando de lograr el mismo comportamiento con UICollectionView. 'indexPathsForVisibleItems'parece ser la forma de hacerlo ...

Lo que llegué hasta ahora:

El siguiente código proporciona un funcionamiento fluido entre rotaciones, aunque el cálculo del elemento central parece estar apagado:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)

    self.collectionView?.collectionViewLayout.invalidateLayout()

    let middleItem = (self.collectionView?.indexPathsForVisibleItems.count / 2) - 1
    let indexPath = self.collectionView?.indexPathsForVisibleItems[middleItem]

    coordinator.animate(alongsideTransition: { ctx in

        self.collectionView?.layoutIfNeeded()
        self.collectionView?.scrollToItem(at: indexPath!, at: .centeredVertically, animated: false)

    }, completion: { _ in


    })
}
Lo que no funciona con el código anterior:Retrato -> Paisaje: Un poco alejado de la celda que debería terminar en el centro.Retrato -> Paisaje -> Retrato: Completamente fuera de lo que fue el desplazamiento en vertical en primer lugar.Retrato -> Paisaje -> Retrato -> Paisaje: ¡Lejos!Notas:Tengo que invalidar el diseño de la vista de colección tras la rotación debido a que los tamaños de celda y el espaciado deben ser recalculados.self.collectionView? .layoutIfNeeded () estar dentro de la animación
bloque, hacer la transición suaveTal vezscrollToItem se llama antes de que el diseño de la vista de colección no se finalice, lo que lleva a un desplazamiento de desplazamiento incorrecto?¿Metodo alternativo?

En lugar de usar 'indexPathsForVisibleItems', usa solo'contentOffset'? Calcular el desplazamiento después de la rotación de desplazamiento? Pero, ¿cómo sería esto posible cuando contentSize después de la rotación podría ser diferente de lo que se espera que haga con diferentes tamaños de celda, espaciado de celda, etc.?

Respuestas a la pregunta(2)

Su respuesta a la pregunta