J'ai un UICollectionViewLayout
personnalisé qui utilise des vues supplémentaires pour placer un pied de page au bas de chaque page.
Cela semble avoir bien fonctionné jusqu'à ce que je commence à insert des cellules au bas d'une page.
Comme les vues supplémentaires doivent être liées à un NSIndexPath au sein de UICollectionView, dans ma méthode de layout préparée, je détecte la dernière cellule de la page et les attributes layoutAtsortingbutes de la vue supplémentaire sont stockés dans le dernier indexPath de la page.
C'est la disposition de la vue de collection avant d'insert une nouvelle cellule:
|- Page 1 |-- [0, 0] |-- [0, 1] |-- [0, 2] |- Footer (indexPath [0, 2]) |- Page 2 |-- [1, 0] |-- [1, 1] |- Footer (indexPath [1, 1])
Comme prévu, ma méthode prepareLayout crée et stocke UICollectionViewLayoutAtsortingbutes
pour indexPaths [0, 2]
et [1, 1]
.
layoutAtsortingbutesForSupplementaryViewOfKind:atIndexPath:
méthode est également appelée deux fois en returnnant les attributes corrects pour indexPaths ( [0, 2]
et [1, 1]
)
Le problème est maintenant que lorsque j'insère une nouvelle cellule à l'index [1, 2]
la méthode prepareLayout
correctement les mises en page et modifie l'indexPath du second pied de page à [1, 2]
comme prévu.
Cependant, lorsque layoutAtsortingbutesForSupplementaryViewOfKind:atIndexPath:
est à nouveau appelé pour mettre à jour l'interface, sa propriété indexPath
renvoie toujours [1, 1]
. Cela returnne alors nil sur la méthode car il n'existe pas et provoque un crash (évidemment)!
Pourquoi layoutAtsortingbutesForSupplementaryViewOfKind:atIndexPath:
returnne toujours l' layoutAtsortingbutesForSupplementaryViewOfKind:atIndexPath:
incorrect (ancien)? J'ai vérifié que la layout est invalidée et que mon dictionary footerAtsortingbutes qui stocke le layoutAtsortingbutes a le bon (nouveau) indexPath, donc d'après ce que j'ai lu cela devrait fonctionner?
Il est également important de noter que cela ne se produit que lorsqu'une insertion animée a lieu … L'appel de reloadData
ne reloadData
pas.
En outre, je ne peux pas lier la vue supplémentaire à une seule section car ma layout personnalisée est conçue pour la page collectionView et les sections peuvent déborder sur différentes pages, ce qui signifie plusieurs vues supplémentaires pour chaque section.
Voici un aperçu du file .m de ma layout: https://gist.github.com/liamnichols/6621694
ou vous pouvez find le repo ici: https://github.com/liamnichols/LNCollectionViewPagedLayout/tree/master/Source
Ma solution alternative serait d'assigner les vues supplémentaires à un NSIndexPath
personnalisé où la valeur d' indexPath.row
déterminerait quelle page est la vue supplémentaire mais je ne suis pas sûr que ce soit un moyen approprié de gérer cela alors pensé que je requestrais conseil avant la main.
Toute aide est la bienvenue,
Merci.