UICollectionView ajout d'image dans une cellule
Je suis en train de travailler sur un projet qui utilise UICollectionView
pour afficher les données, qui peuvent ou peuvent ne pas avoir une image.
La façon dont je suis l'aide est de vérifier si l'url de l'image n'est pas nulle, puis ajouter une ImageView sur la cellule.
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
if (question.picture != (id)[NSNull null]) {
//add AsyncImageView to cell
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.clipsToBounds = YES;
imageView.tag = IMAGE_VIEW_TAG;
[cell addSubview:imageView];
[[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageView];
imageView.imageURL = [NSURL URLWithString:question.picture];
}
}
Pour ces cellules qui n'ont pas d'image, la cellule devrait ressembler à ceci:
https://dl.dropboxusercontent.com/u/5753236/Stackoverflow/good.png
Cependant, certains d'entre eux vont encore ajouter une ImageView avec recadrée de l'image sur elle, provoquant quelque chose comme ceci:
https://dl.dropboxusercontent.com/u/5753236/Stackoverflow/bad.png
J'ai essayé d'utiliser le SDWebImage, mais toujours pas à résoudre le problème.
L'autre problème est que quand j'ai faites défiler la UICollectionView
, je voudrais voir quelques images affichées comme l'image ci-dessus d'abord, et ensuite de modifier son image correcte après que le chargement est terminé, et je n'ai aucune idée de ce qui est à l'origine du problème.
Merci de m'aider à régler ces deux problèmes, je vous remercie pour toute aide.
OriginalL'auteur Thomas | 2014-05-22
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, la façon d'ajouter des images dans votre cellule est assez dangereuse. La raison en est que vos cellules sont réutilisées (par exemple lorsque vous faites défiler, ou lorsque vous reloadData), et ces images ne sont jamais supprimés de la réutilisation. Donc, vous allez commencer à en voir partout, et vous pouvez même arriver au point où votre cellule contient plusieurs occurrences de l'image. Voici deux façons de le faire :
Premier moyen (le bon sens) : Vous sous-classe votre UICollectionViewCell, et de donner à la sous-classe "imageView de la propriété". Puis vous faites cela dans votre CustomCollectionViewCell.m fichier :
Puis dans votre ViewController votre avoir à déclarer la nouvelle classe de votre collectionViewCells comme ceci :
Elle permettra de s'assurer que les images sont correctement supprimés sur la réutilisation, et en plus c'est plus facile pour l'installation de la cellule de votre collectionView délégué.
Deuxième moyen (sale), vous supprimez le point de vue chaque fois que vous chargez une nouvelle cellule :
Cette façon est beaucoup plus facile, mais je ne le recommande pas 😛
Maintenant essayer cela et laissez-moi savoir comment votre bug évolue.
Content d'avoir pu aider 😉
Trouvé cela très utile. En particulier, la prepareForReuse() la méthode et le nettoyage nécessaire. Comme je l'ai découvert il y a eu plusieurs occurrances de ma cellule ou comme il est apparu plusieurs titleLabels je l'avais placé à l'intérieur de ma cellule pour tester l'ordre de la collectionview.
OriginalL'auteur Kujey
Code Swift 4
OriginalL'auteur Abishek T