Actualmente estoy usando UICollectionView
para la cuadrícula de la interfaz de usuario y funciona bien. Sin embargo, me gustaría habilitar el desplazamiento horizontal. La cuadrícula admite 8 elementos por página y cuando el número total de elementos es, digamos 4, así es como se deben organizar los elementos con la dirección de desplazamiento horizontal habilitada:
0 0 x x
0 0 x x
Aquí 0 -> Elemento de colección yx -> Celdas vacías
¿Hay alguna manera de alinearlos en el centro como:
x 0 0 x
x 0 0 x
¿Para que el contenido se vea más limpio?
Además, el arreglo a continuación también podría ser una solución que estoy esperando.
0 0 0 0
x x x x
minimumInteritemSpacing
solo indica su mínimo.return UIEdgeInsetsMake(0, 100, 0, 100);
. Si hay espacio adicional, la vista de colección expandirá el espaciado intermedio, por lo que debe asegurarse de que LeftInset + CellWidth * Ncells + CellSpacing * (Ncells-1) + RightInset = CollectionViewWidthPara aquellos que buscan una solución para las celdas de vista de colección de ancho dinámico alineadas al centro , como yo, terminé modificando la respuesta de Angel para una versión alineada a la izquierda para crear una subclase alineada al centro para
UICollectionViewFlowLayout
.CenterAlignedCollectionViewFlowLayout
fuente
guard let superArray = super.layoutAttributesForElementsInRect(rect) else { return nil } guard let attributes = NSArray(array: superArray, copyItems: true) as? [UICollectionViewLayoutAttributes] else { return nil }
interItemSpacing
para usar el predeterminadominimumInteritemSpacing
.Las principales soluciones aquí no me funcionaron de inmediato, por lo que se me ocurrió esto, que debería funcionar para cualquier vista de colección de desplazamiento horizontal con diseño de flujo y solo una sección:
fuente
Es fácil calcular inserciones dinámicamente, este código siempre centrará sus celdas:
fuente
Al igual que en otras respuestas, esta es una respuesta dinámica que debería funcionar para celdas de tamaño estático. La única modificación que hice es que puse el acolchado en ambos lados. Si no hice esto, tuve problemas.
C objetivo
Rápido
Además, si aún tiene problemas, asegúrese de establecer ambos valores
minimumInteritemSpacing
yminimumLineSpacing
los mismos, ya que estos valores parecen estar interrelacionados.fuente
Pon esto en tu delegado de vista de colección. Considera más la configuración de diseño de flujo básico que las otras respuestas y, por lo tanto, es más genérico.
versión rápida (gracias g0ld2k):
fuente
totalCellWidth
debería serlocellWidth*cellCount + spacing*(cellCount-1)
.Mi solución para celdas de vista de colección de tamaño estático que deben tener relleno a izquierda y derecha
fuente
Tengo una barra de etiquetas en mi aplicación que usa un
UICollectionView
&UICollectionViewFlowLayout
, con una fila de celdas alineadas en el centro.Para obtener la sangría correcta, resta el ancho total de todas las celdas (incluido el espaciado) del ancho de tu
UICollectionView
y divídelo por dos.El problema es esta función:
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
se llama antes ...
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
... por lo que no puede iterar sobre sus celdas para determinar el ancho total.
En su lugar, debe calcular el ancho de cada celda nuevamente, en mi caso lo uso
[NSString sizeWithFont: ... ]
ya que los anchos de mi celda están determinados por el propio UILabel.fuente
interSpacing
?interSpacing
es solo una constante en mi código, que determina el espacio que tengo entre UICollectionViewCellsEn Swift, lo siguiente distribuirá las celdas de manera uniforme aplicando la cantidad correcta de relleno en los lados de cada celda. Por supuesto, primero debe conocer / configurar el ancho de su celda.
fuente
¡Swift 2.0 funciona bien para mí!
Dónde: screenWight : básicamente, su anchura de mi colección (ancho de pantalla completa) - Me hizo constantes: dejado screenWight:. CGFloat = UIScreen.mainScreen () bounds.width porque self.view.bounds espectáculos cada vez 600 - coz de SizeClasses elementos - matriz de celdas 50 - mi ancho de celda manual 10 - mi distancia entre celdas
fuente
Puede usar https://github.com/keighl/KTCenterFlowLayout así:
fuente
No estoy seguro de si esto es nuevo en Xcode 5 o no, pero ahora puede abrir el Inspector de tamaño a través de Interface Builder y establecer un recuadro allí. Eso evitará que tenga que escribir código personalizado para hacer esto por usted y debería aumentar drásticamente la velocidad a la que encuentra las compensaciones adecuadas.
fuente
Otra forma de hacer esto es configurando
collectionView.center.x
, así:En este caso, solo respetando el recuadro correcto que me funciona.
fuente
Según la respuesta del usuario 3676011, puedo sugerir una más detallada con una pequeña corrección. Esta solución funciona muy bien en Swift 2.0 .
Hubo un problema en
donde debe
-1
mencionarse adicionalmente .fuente
Así es como obtuve una vista de colección que estaba alineada en el centro con un espaciado fijo entre elementos
fuente
Versión funcional de la respuesta de Objective C de kgaidis usando Swift 3.0:
fuente
Aquí está mi solución con algunas suposiciones:
Siéntase libre de adaptarse a sus necesidades.
Diseño centrado con ancho de celda variable:
Resultado:
fuente
Así es como puede hacerlo y funciona bien
fuente