¿Cómo centrar la primera y la última celda de una UICollectionView horizontal?

Estoy intentando centrar la primera y la última celda de una vista de colección horizontal .

El único enfoque que encontré hasta ahora fue agregar celdas adicionales al principio y al final de mi UICollectionView . Este método fue totalmente una mala idea por razones obvias, pero no encontré una mejor forma de hacerlo por ahora. Y ya que, con el iPhone 6 y el iPhone 6+, el layout de mi vista está totalmente roto … (facepalm)

Para ilustrar mi necesidad, necesito mostrar algo como esto:

 | xxxxx| where the first x represent my first cell and |xxxxx | where the last x represent my last cell 

Creo que usar una subclass UICollectionViewFlowLayout es la forma correcta de hacerlo con contenido contentInset pero soy un novato total con estos componentes.
¿Algún enlace o sugerencia sobre cómo lograr esto?

Publicar aquí para reference futura, ya que he estado trabajando con el mismo problema, y ​​encontré una solución. Probado en Xcode Versión 8.2.1 (8C1002) con Swift 3

UICollectionViewDelegate tiene la func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets

Para centrar la primera y la última celda en la vista de colección, calcula el recuadro haciendo lo siguiente:

 let inset: CGFloat = collectionView.frame.width * 0.5 - cellSize.width * 0.5 

Después de esto, simplemente devuelve el nuevo UIEdgeInsetMake(0, inset, 0, inset)

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { let inset: CGFloat = collectionView.frame.width * 0.5 - cellSize.width * 0.5 return UIEdgeInsetsMake(0, inset, 0, inset) } 

——- Editar ——-

En este caso, almaceno el tamaño de celda como un valor codificado y lo configuro mediante el delegate func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize