ios - Obtenga el número de filas en UICollectionView
ios6 (1)
Puede obtener la posición de un artículo después de que [myCollectionView.collectionViewLayout layoutAttributesForItemAtIndexPath:]
con [myCollectionView.collectionViewLayout layoutAttributesForItemAtIndexPath:]
Si no conoce las dimensiones de sus artículos, o no quiere asumir que lo hace, un enfoque sería iterar sobre los artículos en su colección y buscar un cambio de paso en la posición Y del artículo. Obviamente, esto solo funciona si está usando un diseño basado en la cuadrícula.
Esto hace el truco:
NSInteger totalItems = [myCollectionView numberOfItemsInSection:0];
// How many items are there per row?
NSInteger currItem;
CGFloat currRowOriginY = CGFLOAT_MAX;
for (currItem = 0; currItem < totalItems; currItem++) {
UICollectionViewLayoutAttributes *attributes =
[collectionView.collectionViewLayout layoutAttributesForItemAtIndexPath:
[NSIndexPath indexPathForItem:currItem inSection:0]];
if (currItem == 0) {
currRowOriginY = attributes.frame.origin.y;
continue;
}
if (attributes.frame.origin.y > currRowOriginY + 5.0f) {
break;
}
}
NSLog(@"new row started at item %ld", (long)currItem);
NSInteger totalRows = totalItems / currItem;
NSLog(@"%ld rows", (long)totalRows);
Si conoce las dimensiones de sus artículos, puede obtener la posición del último artículo con
NSInteger totalItems = [self.timelineCollectionView numberOfItemsInSection:0];
NSIndexPath lastIndex = [NSIndexPath indexPathForItem:totalItems - 1 inSection:0];
UICollectionViewLayoutAttributes *attributes =
[myCollectionView.collectionViewLayout layoutAttributesForItemAtIndexPath:lastIndex];
// Frame of last item is now in attributes.frame
Luego tome las dimensiones de ese último artículo y divida por la altura de fila conocida. No te olvides de dar cuenta de los encabezados o espacios. Estas propiedades también están disponibles desde UICollectionViewFlowLayout
.
Tire del diseño de flujo con
UICollectionViewFlowLayout *myFlowLayout = (UICollectionViewFlowLayout*)myCollectionView.collectionViewFlowLayout;
Y mira adentro
myFlowLayout.headerReferenceSize
myFlowLayout.minimumLineSpacing
y así.
La vista UICollection ajusta automáticamente el número de filas según la cantidad de elementos por sección y el tamaño de cada celda.
Entonces, ¿hay alguna manera de obtener el número de filas en un UICollectionView?
Por ejemplo: si tengo un calendario con 31 días que encaje automáticamente en n filas. ¿Cómo obtengo el valor de esta ''n''?