Cela pourrait être un post en double mais je n’ai trouvé la solution dans aucun de ceux-ci:
Je règle ma UICollectionView
comme:
UINib *nib = [UINib nibWithNibName:@"CollectionViewCell"
bundle:[NSBundle mainBundle]];
[_collectionView registerNib: nib forCellWithReuseIdentifier:@"bCell"];
(J'ai essayé de définir délégué, sans délégué, etc.).
Mais alors, seuls les
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
est appelé alors que
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
not.
J'ai vérifié le numberOfItemsInSection I, et c'est toujours> 0 (c'est exactement 17).
J'ai vérifié pour appeler [_collectionView reloadData];
et rien ne se produit non plus.
J'ai essayé différentes choses mais je ne peux pas le faire fonctionner.
De plus, ma UICollectionView
devrait être ici, mais ce n'est pas:
Est-ce que quelqu'un a un indice? Merci.
Ok je pense que cela pourrait être utile pour les problèmes futurs avec ceci ...
C'était à cause des contraintes sur le StoryBoard. Je ne comprends pas vraiment pourquoi cela se produit, car je venais juste de fixer un espace horizontal. J'ai supprimé l'espace horizontal en tant que contrainte pour cette vue et tout fonctionne correctement.
Eh bien, laissez la vie couler.
Je suis également confronté au même problème et je sais enfin que j'ai transmis un objet de classe incorrect pour collectionViewLayout, je passe à UICollectionViewFlowLayout au lieu de UICollectionViewLayout lors de la création d'un objet pour UICollectionView comme ci-dessous.
collectionView = UICollectionView(frame: CGRectMake(5, 0, 400, 40) , collectionViewLayout: UICollectionViewFlowLayout())
Ajoutez ceci à viewDidLoad:
self.automaticallyAdjustsScrollViewInsets = NO;
Je rencontre ce problème aussi. J'ai vérifié tous les problèmes possibles, tout semble aller pour le mieux. Ensuite, j'ai essayé de changer les méthodes de rechargement.
[self.colView reloadData]
-> [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:x]];
Ensuite, tout a fonctionné. Cependant, je ne comprends toujours pas comment.
1. cellForItemAtIndexPath sera appelé lorsque vous renvoyez plus de 0 éléments sur la méthode numberOfItemsInSection.
2. Vérifiez que votre UICollectionViewFlowLayout est correct ou le vôtre. UICollectionViewLayout est une classe abstraite que vous ne pouvez pas utiliser directement
3. Vérifiez la taille de la cellule et de la vue Collection de la vue de collection.
4. Essayez de définir la taille de votre collectionview en code. [votreCollectionViewFlowLayout setItemSize: CGSizeMake (200, 200)];
5.Si l'un d'entre eux ne fonctionne PAS, alors tuez le XCode et redémarrez. Parfois, cela résoudra le problème.
Apple dit
La classe UICollectionViewLayout est une classe de base abstraite que vous sous-classez et utilisez pour générer des informations de présentation pour une vue de collection. Le travail d’un objet de modèle consiste à déterminer l’emplacement des cellules, des vues supplémentaires et des vues de décoration à l’intérieur des limites de la vue de collection et à rapporter ces informations à la vue de collection lorsque cela est demandé. La vue de collection applique ensuite les informations de disposition fournies aux vues correspondantes afin qu'elles puissent être présentées à l'écran.
Vous devez sous-classer UICollectionViewLayout pour pouvoir l'utiliser. Avant d’envisager un sous-classement, vous devez examiner la classe UICollectionViewFlowLayout pour voir si elle peut être adaptée à vos besoins de présentation.
Je viens de constater que NONE of cellForItemAtIndexPath est appelé (sous iOS 10) tant que au moins UNE cellule a une hauteur de zéro.
Disclaimer: désolé si cela aurait dû être un commentaire - pas assez de réputation.
Pour moi le cellForItemAtIndexPath n'est pas appelé pour la première fois après avoir défini la contrainte de la collectionView sur 0, puis de nouveau en le réglant à sa taille réelle.
@IBOutlet weak var collectionVwHeightContraint: NSLayoutConstraint!
if attachments.count > 0 {
collectionVwHeightContraint.constant = 100
}else {
collectionVwHeightContraint.constant = 0
}
// collectionVwHeightContraint is my collectionView height Contraint outlet
J'ai résolu ceci en appelant:
self.view.layoutIfNeeded()
J'espère que ça va aider quelqu'un :)
Ce qui m'a aidé, c'est de définir la bonne variable itemSize
. Ma cellForItemAtIndexPath
n'était pas appelée à cause d'une mauvaise hauteur.
Alors je mets la taille à:
[self.myCollectionViewFlowLayout setItemSize:CGSizeMake(170, 300)];
Pour moi, le problème était que je créais ma vue de collection par programme, mais que je lui avais donné CGRectZero
comme cadre. Je le disposais en utilisant Auto Layout après viewDidLoad
. Si je dispose la vue de collection pendant le chargement du contrôleur de vue, il appelle correctement cellForItemAtIndexPath:
.
Pour moi, c'était que le conteneur de ma collectionView n'avait pas translatesAutoresizingMaskIntoConstraints = false
J'ai eu le même problème avec la sortie de vue de collection sur un storyboard avec des contraintes "standard" (en bas, en haut, en tête, en queue fixée à la vue intérieure).
J'ai résolu de cette façon:
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.itemSize = self.collectionView.frame.size
J'avais rencontré un problème similaire. Le problème était avec le numberOfItems dans la section. Votre cellForRowAtIndexPath peut ne pas être appelé si votre nombre de sections ou le nombre de lignes de la section est inférieur à zéro.