Je souhaite être en mesure d'appeler ma classe UICollectionViewCell
dans la fonction sizeForItemAtIndexPath
. Comme ceci:Appelez une cellule UICollectionView dans sizeForItemAtIndexPath
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let cell = MyCollectionViewCell()
let itemHeights = cell.titleLabel.frame.size.height + cell.subtitleLabel.frame.size.height + 20
return CGSize(width: self.view.frame.size.width - 30, height: itemHeights + cell.thumbnail.frame.size.height)
}
Le problème est que cell.titleLabel.frame.size.height
, cell.subtitleLabel.frame.size.height
et cell.thumbnail.frame.size.height
retournent tous nil
. Je suppose que c'est parce que chaque fois que sizeForItemAtIndexPath
est appelée, la cellule n'a pas encore été chargée et cellForItemAtIndexPath
n'a pas encore été appelée.
J'ai besoin de savoir cela parce que le cell.titleLabel
peut être plusieurs lignes et largeurs qui sont définies dans le cellForItemAtIndexPath
.
Une idée?
Peut-être que cela peut aider https://stackoverflow.com/questions/30405063/setting-cell-height-of-collectionview-doesnt-really-expand-cell- for-scrolling – ryantxr
Vous ne devez pas mettre en file d'attente une cellule dans une fonction autre que cellForItemAt: 'Même si vous supprimez une cellule, vous n'aurez pas une cellule remplie avec les valeurs de ce chemin d'index. Vous devrez calculer des valeurs pour la hauteur en fonction des données de la cellule, ou utiliser une hauteur de cellule automatique et fournir une estimation de la taille de votre cellule – Paulw11