Alineando de derecha a izquierda en UICollectionView

esta es una pregunta bastante simple, pero no he podido encontrar una respuesta definitiva en el SO (si me lo perdí, corríjame).

Básicamente, mi pregunta es: ¿Es posible alinear los contenidos de la fila de UICollectionView de derecha a izquierda en lugar de de izquierda a derecha?

En mi investigación he visto respuestas que sugieren la subsorting UICollectionViewFlowLayout , pero no pude encontrar un ejemplo donde se creó una para alignment correcta.

Mi objective es tener 2 vistas de colección configuradas así:

Ejemplo

¡Cualquier ayuda es muy apreciada!

Puede get un resultado similar al realizar una transformación en la vista de colección e invertir la inversión en su contenido:

Primero, al crear UICollectionView, ejecuté un flip horizontal:

 [collectionView_ setTransform:CGAffineTransformMakeScale(-1, 1)]; 

A continuación, subclass UICollectionViewCell y aquí haz el mismo giro horizontal en su contenidoView:

 [self.contentView setTransform:CGAffineTransformMakeScale(-1, 1)]; 

sin hacer Xtransform a la vista de la colección simplemente forzó RTL

 YourCollectionView.semanticContentAttribute = UISemanticContentAttribute.forceRightToLeft 

Para cualquiera que intente lograr el layout de derecha a izquierda de UICollectionView en Swift

 //in viewDidLoad YourCollectionView.transform = CGAffineTransform(scaleX: -1.0, y: 1.0) //in cellForItemAtIndexPath cell.transform = CGAffineTransform(scaleX: -1.0, y: 1.0) 

A partir de iOS 9, las Vistas de la colección admiten RTL de acuerdo con este video de WWDC . Por lo tanto, ya no es necesario crear un layout de flujo de RTL (a less que ya esté usando un layout personalizado).

Seleccione: Editar esquema … > Opciones > Ejecutar > Idioma de la aplicación > Pseudolenguaje de derecha a izquierda

introduzca la descripción de la imagen aquí

Cuando compile en Simulator, el text se alineará a la derecha y su vista de colección se orderará de derecha a izquierda.

introduzca la descripción de la imagen aquí

Sin embargo, hay un problema. Cuando contentOffset.x == 0 , la position de desplazamiento de la vista de colección está en el borde Left (incorrecto) en lugar del borde Right (correcto). Ver este artículo de la stack para más detalles.

Una solución es simplemente desplazarse por el First elemento hacia el .Left (hay un gotcha – .Left está realmente a la derecha o el borde principal ):

 override func viewDidAppear(animated: Bool) { if collectionView?.numberOfItemsInSection(0) > 0 { let indexPath = NSIndexPath(forItem: 0, inSection: 0) collectionView?.scrollToItemAtIndexPath(indexPath, atScrollPosition: .Left, animated: false) } } 

En mi proyecto de testing, mi vista de colección se anidó dentro de una celda de vista de tabla, por lo que no tuve acceso a viewDidAppear() . Así que, en cambio, terminé conectándome a drawRect() :

 class CategoryRow : UITableViewCell { @IBOutlet weak var collectionView: UICollectionView! override func drawRect(rect: CGRect) { super.drawRect(rect) scrollToBeginning() } override func prepareForReuse() { scrollToBeginning() } func scrollToBeginning(){ guard collectionView.numberOfItemsInSection(0) > 0 else { return } let indexPath = NSIndexPath(forItem: 0, inSection: 0) collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .Left, animated: false) } } 

Para ver esto en acción, echa un vistazo a la twig RTL en este git repo . Y para el context, vea esta publicación de blog y sus comentarios .

introduzca la descripción de la imagen aquí

Para cualquier persona que tenga la misma pregunta:

Terminé usando la biblioteca UICollectionViewRightAlignedLayout que recomendó @ chinttu-roxen-twigni. Puede configurarlo con código:

 self.collectionView.collectionViewLayout = [[UICollectionViewRightAlignedLayout alloc] init]; 

o mediante el creador de interfaces:

A través del generador de interfaces

Terminé haciendo un par de modificaciones a la biblioteca, pero en general funciona muy bien.

Además de la respuesta de Tawfik:

También puede configurar la propiedad Semantic de UICollectionView a través de Interface Builder:

Guión gráfico

Más sobre esta propiedad: en esta pregunta