UICollectionView estimatedItemSize – la dernière cellule n'est pas alignée

Je veux faire un horizontalScrolling flowLayout UICollectionView avec estimateItemSize et preferredLayoutAtsortingbutesFittingAtsortingbutes dans la cellule. Mais il y a quelque chose qui ne va pas avec la dernière cellule. Une idée d'où est le problème? Projet lui-même

entrez la description de l'image ici

@implementation RowCollectionView - (instancetype) initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout { if (self = [super initWithFrame:frame collectionViewLayout:layout]) { [self configureRowCollectionView]; } return self; } - (void) awakeFromNib { [super awakeFromNib]; [self configureRowCollectionView]; } - (void) configureRowCollectionView { self.backgroundColor = [UIColor lightGrayColor]; self.dataSource = self; self.delegate = self; // Horizontal Direction UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *) self.collectionViewLayout; flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; // Estimated Item Size flowLayout.estimatedItemSize = CGSizeMake(self.bounds.size.height, self.bounds.size.height); [self registerClass:[RowCollectionViewCell class] forCellWithReuseIdentifier:NSSsortingngFromClass([RowCollectionViewCell class])]; } - (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 10; } - (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSSsortingngFromClass([RowCollectionViewCell class]) forIndexPath:indexPath]; cell.contentView.backgroundColor = [UIColor redColor]; return cell; } @end @implementation RowCollectionViewCell - (UICollectionViewLayoutAtsortingbutes *) preferredLayoutAtsortingbutesFittingAtsortingbutes:(UICollectionViewLayoutAtsortingbutes *)layoutAtsortingbutes { [super preferredLayoutAtsortingbutesFittingAtsortingbutes:layoutAtsortingbutes]; UICollectionViewLayoutAtsortingbutes *atsortingbutes = [layoutAtsortingbutes copy]; atsortingbutes.size = CGSizeMake(80, 80); return atsortingbutes; } @end 

Vous définissez doneItemSize dans l'init de view lui-même.

Vous devez le définir dans un controller.

Aussi,

Si toutes vos cellules ont la même hauteur, utilisez plutôt la propriété itemSize à la place de cette propriété pour spécifier la taille de la cellule.

Documentation: estimatedItemSize

il existe une méthode simple pour résoudre cela. Vous pouvez append un nombre de cellules prototype pour vérifier la cellule à la position requirejse. Une fois que vous trouvez le problème à la dernière cellule. Vérifiez les encarts de cellule dans la window Inspecteur.

Vous appelez super méthode, mais vous n'avez pas utilisé superAffichage layoutA returnné.

  [super preferredLayoutAtsortingbutesFittingAtsortingbutes:layoutAtsortingbutes]; 

Vous pouvez essayer d'imprimer les attributes layoutAtsortingbutes d'origine vs layoutAtsortingbutes de super. Parfois, vous n'avez pas besoin d'appeler super fonction.

Deuxièmement, vous pouvez créer une disposition de stream personnalisée ou définir un encart pour permettre à votre cellule d'aligner le haut. Je l'ai fait dans mon projet.

Vous pouvez considérer cela comme une suggestion. Selon moi, la hauteur de UICollectionView est plus que UICollectionViewCell Height, c'est pourquoi cela se passe. s'il vous plaît faites les égaler les

La taille de cellule personnalisée doit être identique à celle de la cellule de vue de collection, veuillez vérifier cela. Cela peut résoudre le problème pour vous.

J'ai fait un petit projet similaire (une vue de collection horizontale brute (1 * N)), voici le github. J'espère que ce serait utile pour votre exigence.

https://github.com/texas16/HorizontalCollectionView