UICollectionView affichant des cellules incorrectes après le défilement - problème de de-file d'attente?
J'ai un UICollectionView dans un UIViewController. Dans le collectionView cellForItemAtIndexPath: la méthode, il crée une série de custom sur la base de cellules de la source de données. La coutume cellules contiennent à leur tour une UIView, sous-classé à tirage unique des pages PDF.
Il est mis en place de manière à diviser un fichier PDF en ses pages simples, de sorte que la cellule 1 contient PDF page 1, la cellule 2 au format PDF sur la page 2, et ainsi de suite. C'est très bien, voici mon problème:
Quand je scroll vers le bas, le UICollectionView commence à afficher les mauvaises cellules. Par exemple, dans un 34 document d'une page, il montre cellules/pages 1-16 dans l'ordre correct, mais ensuite il commence à afficher des pages qui semblait avoir été retiré plus haut, tels que la cellule 1, cellule 2, la cellule 4. Je n'ai jamais obtenir n'importe où près de la cellule/page 34.
J'ai vu des comportements similaires de UITableView dans le passé, et de croire qu'il a quelque chose à voir avec la dequeueing des cellules, ou d'un délégué de la méthode. Pas tout à fait sûr - de toute aide est appréciée.
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
//create custom cell
CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellID" forIndexPath:indexPath];
//set file name (always the same; one PDF file)
cell.fileName = fileName;
cell.backgroundColor = [UIColor clearColor];
//set the title to the page number
cell.title = [NSString stringWithFormat:@"page %@", [countArray objectAtIndex:indexPath.row]];
//set the current page (which indicates which page to display) according to the pageCount
cell.currentPage = [[countArray objectAtIndex:indexPath.row] intValue];
return cell; }
source d'informationauteur Johnny Rockex
Vous devez vous connecter pour publier un commentaire.
J'ai eu similare questions. C'est probablement parce que la réutilisés cellules n'ont pas la redessiner. Dans votre personnalisé de la cellule contenu classe (PDF), déclenchement de la redessiner si l'image est mise à jour:
Cela a fonctionné pour moi. En outre, si votre taille de cellule peut changer, l'ensemble d'un redimensionnement automatique de masque, de sorte qu'il remplit l'espace avec
lors de l'initialisation.
Fixe problème similaire, à l'aide de prepareForReuse méthode
il suffit d'ajouter cette méthode à votre cellule personnalisé de mise en œuvre
J'ai résolu un problème similaire dans swift basé sur Asatur Galstyan de réponse.
Après avoir associé une classe personnalisée à une cellule dans un storyboard de la prepareForReuse() la fonction peut être surchargée:
Il y a défaut de mise en œuvre de prepareForReuse() ne fait rien (au moins dans iOS 10), mais Apple recommande d'appeler super.prepareForReuse() lors de la substitution de toute façon.