I " https://www.raywenderlich.com/392-uicollectionview-custom-layout-tutorial-pinterest " Pour créer un UICollectionView personnalisé. (Pour ajuster la hauteur de la cellule)
Si je fais défiler vers le haut, la cellule continuera à être ajoutée, et défilez de haut en bas pour actualiser.
Il n'y a aucun problème lorsque vous exécutez votre application et que vous développez initialement Cells . Cependant, il y a toujours une erreur lors de l'actualisation ou de la réorganisation du nombre de cellules.
ERREUR :
*** Échec d'assertion dans - [UICollectionViewData validateLayoutInRect:], /BuildRoot/Library/Caches/com.Apple.xbs/Sources/UIKitCore/UIKit-3698.93.8/UICollectionViewData.m.m44.
*** Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: 'UICollectionView a reçu des attributs de mise en page pour une cellule avec un chemin d'index inexistant:
Par conséquent, " Bug iOS 10: UICollectionView a reçu les attributs de mise en forme pour une cellule dont le chemin d’index n’existe pas " Et a tenté de résoudre l’erreur.
sur la ligne ci-dessous
self.artCollectionView.reloadData ()
J'ai essayé d'ajouter
self.artCollectionView.collectionViewLayout.invalidateLayout ()
mais ce n'était pas résolu.
Aussi, je ne sais pas où courir
cache.removeAll ()
dans la section prepare () . (Il existe une fonction prepare () dans PinterestLayout.Swift)
Quelle est la bonne façon de résoudre l'erreur?
Il y a une fonction prepare
dans PinterestLayout.Swift
comme il se doit, car c'est la seule disposition utilisée pour personnaliser la collectionView
.
À la ligne 76, dans PinterestLayout.Swift file.
Essayer
override public func prepare() {
cache.removeAll()
if cache.isEmpty {
.....
}
}
J'ai reçu cette erreur lorsque je définissais accidentellement la hauteur d'une cellule de collectionView à 0. Assurez-vous que la hauteur (ou toute autre dimension) est supérieure à 0! S'assurer qu'il était toujours supérieur à 0 a résolu le problème pour moi.
extension UICollectionView{
func refreshLayout() {
let oldLayout = collectionViewLayout as! UICollectionViewFlowLayout
let newLayout = UICollectionViewFlowLayout()
newLayout.estimatedItemSize = oldLayout.estimatedItemSize
newLayout.footerReferenceSize = oldLayout.footerReferenceSize
newLayout.headerReferenceSize = oldLayout.headerReferenceSize
newLayout.itemSize = oldLayout.itemSize
newLayout.minimumInteritemSpacing = oldLayout.minimumInteritemSpacing
newLayout.minimumLineSpacing = oldLayout.minimumLineSpacing
newLayout.scrollDirection = oldLayout.scrollDirection
newLayout.sectionFootersPinToVisibleBounds = oldLayout.sectionFootersPinToVisibleBounds
newLayout.sectionHeadersPinToVisibleBounds = oldLayout.sectionHeadersPinToVisibleBounds
newLayout.sectionInset = oldLayout.sectionInset
newLayout.sectionInsetReference = oldLayout.sectionInsetReference
collectionViewLayout = newLayout
}
}
Puis appelez:
YourCollectionView.refreshLayout()
YourCollectionView.reloadData()
Bon codage!