¿Cómo configuro el espacio entre celdas en una sección de UICollectionView
? Sé que hay una propiedad minimumInteritemSpacing
que la configuré en 5.0, pero el espaciado no aparece en 5.0. He implementado el método de delegado de flujo.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
Todavía no estoy obteniendo el resultado deseado. Creo que es el espacio mínimo. ¿No hay alguna manera de establecer el espacio máximo?
ios
objective-c
uicollectionview
Vishal Singh
fuente
fuente
Respuestas:
Sé que el tema es antiguo, pero en caso de que alguien todavía necesite una respuesta correcta, aquí lo que necesita:
Agregue implementación como esa:
donde maximumSpacing se puede establecer en cualquier valor que prefiera. ¡Este truco garantiza que el espacio entre las celdas sea EXACTAMENTE igual al espaciamiento máximo!
fuente
mutableCopy
: no está mutando el contenido de la matriz, sino mutando los objetos dentro de ella.if
a Y una condición adicional:if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x) {
Apoyando la pregunta inicial. Traté de obtener el espacio a 5px en el
UICollectionView
pero esto no funciona, así que con unUIEdgeInsetsMake(0,0,0,0)
...En un UITableView puedo hacer esto especificando directamente las coordenadas x, y en una fila ...
Aquí está mi código UICollectionView:
Actualización: resolvió mi problema con el siguiente código.
ViewController.m
fuente
Usando un diseño de flujo horizontal, también estaba obteniendo un espacio de 10 puntos entre las celdas. Para eliminar el espaciado, necesitaba establecer
minimumLineSpacing
así comominimumInterItemSpacing
cero.Además, si todas sus celdas son del mismo tamaño, es más simple y más eficiente establecer la propiedad en el diseño del flujo directamente en lugar de utilizar métodos delegados.
fuente
minimumInteritemSpacing
. Solo establecerminimumLineSpacing = 0
mi diseño horizontal eliminó el espacio horizontal entre los elementos.Recuerde, es el espacio mínimo de línea , no el espacio mínimo entre elementos o el espacio celular. Porque la dirección de desplazamiento de su collectionView es HORIZONTAL .
Si es vertical, debe establecer el espacio de celda o el espacio entre elementos para el espacio horizontal entre celdas y el espacio entre líneas para el espacio vertical entre celdas.
Versión Objective-C
Versión rápida:
fuente
Pruebe este código para asegurarse de tener un espacio de 5 píxeles entre cada elemento:
fuente
Versión rápida de la respuesta más popular. El espacio entre las celdas será igual a
cellSpacing
.fuente
He encontrado una manera muy fácil de configurar el espaciado entre celdas o filas utilizando IB.
Simplemente seleccione UICollectionView del archivo storyboard / Xib y haga clic en Size Inspector como se especifica en la imagen a continuación.
Para configurar el espacio mediante programación, use las siguientes propiedades.
1) Para configurar el espacio entre filas.
2) Para configurar el espacio entre elementos / celdas.
fuente
Tenga en cuenta el nombre de la propiedad minimalInterItemSpacing . Este será el espacio mínimo entre los elementos, no el espacio exacto . Si establece el valor minimalInterItemSpacing en algún valor, puede asegurarse de que el espaciado no sea menor. Pero existe la posibilidad de obtener un valor más alto.
En realidad, el espacio entre los elementos depende de varios factores itemSize y sectionInset . La vista de colección coloca dinámicamente los contenidos en función de estos valores. Por lo tanto, no puede asegurar el espacio exacto. Debería realizar alguna prueba y error con sectionInset y minimumInterItemSpacing .
fuente
Respuesta para Swift 3.0, Xcode 8
1.Asegúrese de configurar el delegado de vista de colección
2.Implemente el protocolo UICollectionViewDelegateFlowLayout , no UICollectionViewDelegate.
fuente
Código simple para espaciado
fuente
La respuesta votada (y también la versión rápida ) tiene un pequeño problema: habrá un gran espacio a la derecha.
Esto se debe a que el diseño del flujo se personaliza para hacer que el espacio entre celdas sea exacto, con un comportamiento flotante a la izquierda .
Mi solución es manipular el recuadro de la sección, de modo que la sección esté alineada en el centro, pero el espaciado es exactamente como se especifica.
En la captura de pantalla a continuación, el espacio entre elementos y líneas es exactamente de 8 puntos, mientras que la sección de inserción izquierda y derecha será mayor de 8 puntos (para que quede alineada en el centro):
Código rápido como tal:
fuente
let n = Int((containerWidth + minItemSpacing)/((itemWidth+minItemSpacing)))
Defina el
UICollectionViewDelegateFlowLayout
protocolo en su archivo de encabezado.Implemente el siguiente método de
UICollectionViewDelegateFlowLayout
protocolo como este:Haga clic aquí para ver la documentación del
UIEdgeInsetMake
método de Apple .fuente
Enfoque del guión gráfico
Seleccione CollectionView en su guión gráfico y vaya al inspector de tamaño y configure el espaciado mínimo para celdas y líneas como 5
Swift 5 programáticamente
fuente
Si desea ajustar el espacio sin tocar el tamaño real de la celda, esta es la solución que mejor funcionó para mí. #xcode 9 # tvOS11 # iOS11 #swift
Entonces, en UICollectionViewDelegateFlowLayout , cambiar implementar los siguientes métodos, el truco es que tienes que usar ambos, y la documentación realmente no me indicaba que pensara en esa dirección. :RE
fuente
Estoy usando monotouch, por lo que los nombres y el código serán un poco diferentes, pero puede hacerlo asegurándose de que el ancho de la vista de colección sea igual a (x * ancho de celda) + (x-1) * espaciado mínimo con x = cantidad de celdas por fila.
Simplemente siga los pasos basados en su espaciado mínimo de elemento y el ancho de la celda
1) Calculamos la cantidad de elementos por fila en función del tamaño de celda + insertos actuales + espaciado mínimo
2) Ahora tiene toda la información para calcular el ancho esperado para la vista de colección
3) Entonces, la diferencia entre el ancho actual y el ancho esperado es
4) Ahora ajuste las inserciones (en este ejemplo lo agregamos a la derecha, para que la posición izquierda de la vista de colección permanezca igual)
fuente
Tengo una horizontal
UICollectionView
y subclaseUICollectionViewFlowLayout
. La vista de colección tiene celdas grandes, y solo muestra una fila de ellas a la vez, y la vista de colección se ajusta al ancho de la pantalla.Intenté la respuesta de iago849 y funcionó, pero luego descubrí que ni siquiera necesitaba su respuesta. Por alguna razón, configurar el
minimumInterItemSpacing
no hace nada. El espacio entre mis elementos / celdas se puede controlar por completominimumLineSpacing
.No estoy seguro de por qué funciona de esta manera, pero funciona.
fuente
Me topé con un problema similar al OP. Lamentablemente, la respuesta aceptada no funcionó para mí, ya que el contenido de la
collectionView
no se centraría correctamente. Por lo tanto, se me ocurrió una solución diferente que solo requiere que todos los elementos en elcollectionView
son del mismo ancho , que parece ser el caso en la pregunta:Ese código garantizará que el valor devuelto por
...minimumInteritemSpacing...
sea el espacio exacto entre todoscollectionViewCell
y además garantizará que las celdas se centren en elcollectionView
fuente
La solución anterior de vojtech-vrbka es correcta pero activa una advertencia:
El siguiente código debería solucionarlo:
fuente
Versión Swift 3
Simplemente cree una subclase UICollectionViewFlowLayout y pegue este método.
fuente
He intentado la respuesta de iago849 y funcionó.
Swift 4
Aquí está el enlace para el proyecto github. https://github.com/vishalwaka/MultiTags
fuente
Las versiones anteriores realmente no funcionaban con las secciones> 1. Así que mi solución se encontró aquí https://codentrick.com/create-a-tag-flow-layout-with-uicollectionview/ . Para los flojos:
fuente
Tengo un problema con la respuesta aceptada, así que la actualicé, esto funciona para mí:
.h
.metro
fuente
Mi solución en
Swift 3
el espaciado de líneas celulares como en Instagram:Cómo detectar el dispositivo mediante programación: https://stackoverflow.com/a/26962452/6013170
fuente
Bueno, si está creando una vista de colección horizontal para dar espacio entre las celdas, debe establecer la propiedad
minimumLineSpacing
.fuente
Intenta jugar con este método:
fuente