J'utilise un UICollectionView par programmation.UICollectionView avec FlowLAyout ne défile pas lors de la définition des insertions de section
Je l'ai établi est cadre comme suit:
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 3000) collectionViewLayout:flowLayout];
Mon UICollectionViewFlowLayout
a un encart de section définie comme:
flowLayout.sectionInset = UIEdgeInsetsMake(20.0, 20.0, 100.0, 20.0);
Je n'ai aussi 1 section.
J'ai défini la hauteur à 3 000 pour voir si la vue de collection défilerait mais ce n'est pas le cas. Je le règle car la vue de collection ne semble pas défiler vers le haut ou vers le bas lorsque j'insère de nouveaux éléments.
UICollectionView
est sous-classé à partir d'un UIScrollView
, ce qui signifie que je peux continuer à réinitialiser la taille du contenu de la vue défilante. Cela fonctionnerait-il correctement?
Le seul problème est que cela fonctionnerait si je connaissais la taille de tous les éléments, y compris le nombre d'éléments sur chaque ligne.
Si chaque article avait une taille différente, comment pourrais-je connaître la taille de chaque rangée? J'aurais besoin de cela pour ajouter toutes les tailles de lignes et augmenter la hauteur de la taille du contenu de self.collectionView
.
EDIT
Même ma suggestion ci-dessus, la réinitialisation de la taille du contenu, ne fonctionne pas correctement! J'ai essayé ce qui suit lors de la mise à jour de ma vue de collection:
int numberOfRows = self.dataArray.count/3;
self.collectionView.contentSize = CGSizeMake(self.view.frame.size.width, (numberOfRows * 200) + 300);
Ceci est très moche cependant. C'est parce qu'il suppose que toutes mes images sont de taille 200x200px, ce qui correspond à 3 images par rangée (d'où la division par 3).
En outre, même avec le +300 que j'ai, la dernière rangée, je ne vois que les 3/4 et pas tout. Je dois faire défiler plus et je serai capable de le voir mais il remonte encore au 3/4. C'est un peu comme le parchemin à rafraîchir, où la vue ne bouge que si vous le faites glisser et quand vous le quittez, il revient à l'endroit où il se trouvait. Pourquoi cela arrive-t-il? Est-ce juste que Apple a conçu UICollectionView
si mal? C'est un peu ridicule ... UITableViews ajuste automatiquement leur défilement en fonction de leur contenu.
C'était la solution pour moi. J'utilisais une disposition de flux personnalisée qui supprimait les écarts verticaux entre les éléments d'une disposition multi-colonnes. Je n'obtenais que la moitié des articles jusqu'à ce que je le fasse comme Simon l'a suggéré. Je soupçonne la raison pour laquelle j'ai eu le problème est que le nombre d'éléments demandés est basé sur une mise en page standard. –