tutorial example collection iphone ios uicollectionview uicollectionviewcell
http://jack.cox.s3.amazonaws.com/collectionviewprototype.zip

iphone - example - uicollectionviewcell indexpath



Las celdas grandes en un UICollectionView se eliminan mientras aún se muestra la celda (4)

Este problema está siendo rastreado como radar # 12889164

Tengo un UICollectionView que contiene algunos UICollectionViewCells grandes. Estas celdas son tan grandes que llenan completamente los límites de UICollectionView y se extienden fuera de la pantalla.

El problema es que las celdas grandes se eliminan de UICollectionView y se UICollectionView cola para su reutilización mientras aún se muestran, lo que resulta en una vista en blanco. Si continúo desplazándome en el área UICollectionView blanco, finalmente UICollectionView la parte final de la celda y el inicio de la siguiente celda aparecerá exactamente en el lugar correcto.

He deshabilitado efectivamente la reutilización de la celda y el problema sigue aparentemente porque UICollectionView piensa que la celda ya no se muestra porque no hay ninguna esquina dentro de los límites de la vista de colección.

Para demostrar una vista de colección que sea una sola columna y tenga una celda que tenga una altura de 10000px, al desplazarse sobre la celda muy alta, desaparecerá después de que aproximadamente 1000px de contenido se desplace de la pantalla y vuelva a aparecer para mostrar los 1000px finales de contenido para la celda

Puede descargar una aplicación prototipo simple que muestra este problema en: http://jack.cox.s3.amazonaws.com/collectionviewprototype.zip


Este problema me ocurrió junto con esta advertencia en el registro de depuración:

el comportamiento de UICollectionViewFlowLayout no está definido porque: la height del elemento debe ser menor que la altura de UICollectionView menos la sección UICollectionView los valores top e bottom .

Parece que el UICollectionViewFlowLayout no es compatible con celdas más grandes que la pantalla.


He utilizado UICollectionView con celdas del tamaño de la pantalla. Para iPad el tamaño de celda fue 768x1024. Y no he encontrado ningún problema. Por favor, asegúrese de haber configurado el Min Spacing For Cells y For Lines son 0 También devuelva CGSize y UIEdgeInsets correctos de la siguiente manera

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize retval; retval.width=maxWidth; //768 in case of iPad retval.height=maxHeight; //1024 in case of iPad return retval; }

- (UIEdgeInsets)collectionView: (UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(0 , 0, 0, 0); }


Intente esta solución si todavía está buscando una solución rápida: cuando se detecta que una celda tiene una altura mayor que la vista de colección que la contiene, la vista de colección simplemente debe ser más grande que la celda. Por lo tanto, configure el marco collecitonView para que sea más grande y corrija las inserciones de contenido e indicador.

- (void)updateCollectionViewForLargeCellHeight:(CGFloat)largeCellHeight { CGFloat currentCollectionViewHeight = CGRectGetHeight(self.collectionView.frame); if (largeCellHeight > currentCollectionViewHeight) { self.collectionViewBottomConstraint = -largeCellHeight; //This is the bottom constraint of the collectionView to its superview. //If you are not using constraints, simply set the frame for the collectionView UIEdgeInsets edgeInset = UIEdgeInsetsMake(0, 0, largeCellHeight, 0); self.collectionView.contentInset = edgeInset; self.collectionView.scrollIndicatorInsets = edgeInset; [self.collectionView needsUpdateConstraints]; } } - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { CGSize size; [self updateCollectionViewForLargeCellHeight:size.height]; return size; }