Problème de mise en forme UICollectionView

J’utilise UICollectionView utilisant la disposition de stream. J’ai créé un UICollectionViewCell personnalisé pour la même chose. Mais en exécutant le projet, la console continue à lancer cette erreur.

le comportement de UICollectionViewFlowLayout n’est pas défini car: la hauteur de l’élément doit être inférieure à la hauteur de l’ UICollectionView moins les valeurs supérieure et inférieure des encarts de section.

Je me suis assuré que la taille de la cellule est correcte

Quelqu’un a-t-il été capable de résoudre ce problème? Merci d’avance.

Cordialement Nitesh

J’ai trouvé que, en utilisant des storyboards , vous devez aller dans le storyboard et cliquer sur le View Controller global (la vue doit être surlignée en bleu) et aller à l’ Atsortingbutes Inspector (le quasortingème onglet à droite de l’écran) et décocher les “barres inférieures”, “barres inférieures” et “barres opaques”. Cela a éclairci le problème pour moi, et cela a également été résolu pour mes collègues.

J’ai eu quelques problèmes lors de l’utilisation d’une vue de collection pour présenter des contrôleurs de vue plein écran.

Fondamentalement, au moment de l’exécution, il demandera la taille de l’élément et retournera simplement la taille de la vue de collection:

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return self.collectionView.frame.size; } 

Je sais que c’est une réponse très tardive, mais j’ai aussi vécu cela.

Dans mon contrôleur de vue, appelons-le MyViewController. J’ai un UICollectionView qui utilise UICollectionViewCell personnalisé. J’implémente la méthode collectionView: layout: sizeForItemAtIndexPath où je retourne une taille d’élément qui dépend de la hauteur de UICollectionView .

MyViewController est créé dans un storyboard utilisant autolayout pour contrôler la hauteur de UIViewController .

Les cellules se présentent bien en mode portrait, mais pas en mode paysage.

J’ai résolu mes problèmes en invalidant le UICollectionViewLayout de mon UICollectionView dans la méthode viewWillLayoutSubviews .

 - (void)viewWillLayoutSubviews { [self.myCollectionView.collectionViewLayout invalidateLayout]; } 

Auparavant, j’avais essayé d’invalider la mise en page dans willAnimateRotationToInterfaceOrientation:duration , mais cela n’a pas fonctionné. La raison en est probablement que les tailles pour toutes les vues ne sont pas encore calculées, nous devons donc attendre que autolayout ait fini sa magie. Je me réfère à ce thread SO .

Mise à jour pour Swift 4.0:

  override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() self.myCollectionView.collectionViewLayout.invalidateLayout() } 

J’ai moi-même eu ce problème quelques fois lorsque j’ai essayé de créer des vues de collection avec des cellules en plein écran. Mon problème a été causé par la disposition pour 4 “écran dans IB / Storyboard et en spécifiant 320 * 568 pour la taille de l’article, mais en cours d’exécution dans le simulateur en utilisant 3,5”, la solution est de spécifier la taille de votre article dans code avec quelque chose comme:

 UICollectionViewFlowLayout *layout = (id) self.collectionView.collectionViewLayout; layout.itemSize = self.collectionView.frame.size; 

Cela garantit que la taille de la cellule est définie correctement lors de l’exécution.

Si vous utilisez des storyboards et une mise en page automatique, le débogage de ce type de problème est vraiment difficile …

J’ai eu le même problème en essayant d’afficher UICollectionViewCell fullscreen sur iPhone.

La plupart du temps, le problème est lié à la taille de la cellule définie dans

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *) 

ou directement sur flowLayout.itemSize.

Mais essaie:

  1. Sélectionnez le ViewController:

Sélection du contrôleur de vue

  1. Ensuite, décochez les options Extend Edges:

Désactiver les options d'extension des arêtes

Et maintenant, essayez de définir vos contraintes de présentation automatique.

Bonne chance.

Cela a résolu mon problème:

 -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(self.collectionView.frame.size.width, self.collectionView.frame.size.height - 70); } 

Vous pouvez voir la valeur de remplissage de haut en bas sur cet écran:

entrer la description de l'image ici

Veillez à définir le bon masque de ré-autorisation pour UICollectionView et UICollectionviewcell. Cela a résolu mon problème pour iPhone 4 Simulator

Pour moi, j’utilise AKPickerView à l’intérieur d’un UIView personnalisé qui me donnait un tas d’avertissements comme ceux mentionnés ici. Tout ce que j’ai fait pour éliminer les avertissements était de désélectionner la case intitulée ‘AutoResize Subviews’ dans l’inspecteur d’atsortingbuts pour mon UIView personnalisé. Cela a fait taire les avertissements si fort que je pensais que mon enregistreur ne fonctionnait plus.

entrer la description de l'image ici

Je viens de rencontrer le même message d’erreur, mais pour moi, le problème était que lorsque je recevais de nouvelles données de l’API et essayais de rafraîchir ma collectionView, la méthode appelée [collectionView reloadData] ne l’appelait pas sur le thread principal.

J’espère que ça aide quelqu’un …

J’ai le même problème

le comportement de UICollectionViewFlowLayout n’est pas défini car: la hauteur de l’élément doit être inférieure à la hauteur de UICollectionView moins les valeurs supérieure et inférieure des encarts de section.

J’ai résolu ce problème en vérifiant les valeurs dans la section Insets.Et pour la taille de cellule fixe que j’ai utilisée sous le code.

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ CGSize result = [[UIScreen mainScreen] bounds].size; CGFloat scale = [UIScreen mainScreen].scale; result = CGSizeMake(result.width * scale, result.height * scale); CGFloat cellWidth = [[UIScreen mainScreen] bounds].size.width - 20; CGFloat cellHeight = [[UIScreen mainScreen] bounds].size.height - 120; return CGSizeMake(cellWidth, cellHeight); } 

Si vous chargez une collectionView via une vue de conteneur + UICollectionViewController, vous avez peut-être défini une contrainte de hauteur sur la vue de conteneur qui limite la hauteur de la vue de collection elle-même. Dans mon cas, j’ai trouvé que la collectionView.contentSize était plus grande que la contrainte que j’avais définie dans la vue du conteneur.

Evidemment, c’est un peu compliqué mais juste au cas où vous auriez une configuration similaire, je pensais append ce commentaire.

Ce qui a causé ceci pour moi était que j’essayais de définir mes cellules à la taille de la superview plutôt qu’à la taille de UICollectionView . Simplement remplacé le cadre UICollectionView cadre UICollectionView .

Aucune des corrections ci-dessus ne l’a fait pour moi. Je l’ai corrigé avec ça

 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {CGFloat currentWidth = collectionView.frame.size.width; UIEdgeInsets sectionInset = [(UICollectionViewFlowLayout *)collectionView.collectionViewLayout sectionInset]; //here the sectionInsets are always = 0 because of a timing issue so you need to force set width of an item a few pixels less than the width of the collectionView. CGFloat width = currentWidth - 10; }