Comment mettre à jour la taille des cellules dans UICollectionView après que datatables de la cellule sont définies?

J'ai donc une UICollectionView avec une image différente de taille différente dans chaque cellule. Lorsque cellForItemAtIndexPath: est appelé, je mets UICollectionViewCell à jour avec une méthode qui récupère une image de manière asynchronous sur le Web et l'affiche en taille réelle.

Mon problème est que la taille de ma cellule est déjà définie avant avec sizeForItemAtIndexPath. Je voudrais qu'il soit callbacké afin que la cellule ait la taille d'image téléchargée.

Comment puis-je faire ceci?

Si vous avez déjà configuré votre dimensionnement, searchz l'index de la cellule que vous souhaitez actualiser:

NSIndexPath * indexPathOfCellToResize = // index path of cell to refresh [myCollectionView reloadItemsAtIndexPaths:@[indexPathOfCellToResize]]; 

Il y a probablement une meilleure façon de le faire, mais voici quelque chose qui fonctionne:

Créer un protocole de délégué dans votre cellule

 @protocol CellDelegate - (void) imageIsReadyForCell:(id)cell; @end 

Déléguer la propriété

 @property (strong, nonatomic) id<CellDelegate>delegate; 

Dans Cellule, lorsque l'image est terminée, appelez:

 [self.delegate imageIsReadyForCell:self]; 

Puis dans votre file hébergeant l'interface de collectionView in

 @interface SomeViewController : UIViewController <CellDelegate> 

Et au .m

 - (void) imageIsReadyForCell:(id)cell { NSIndexPath * indexOfReadyCell = [yourCollectionView indexPathForCell:cell]; [myCollectionView reloadItemsAtIndexPaths:@[indexPathOfReadyCell]]; } 

Pas une réponse mais je n'ai pas assez de réputation pour commenter.

Im essayant de mettre à jour ma collectionviewcell et j'ai mis sous l'image charge le:

 [self.delegate imageReadyForCell:cell] 

Mais ça ne change rien, j'ai mis des points d'arrêt dans la méthode de imageReadyForCell mais ça ne l'atteint même pas. J'ai suivi toutes les étapes comme ci-dessus avec le protolcol et la propriété pour le délégué de CellDelegate et je n'ai pas réussi à le faire fonctionner.