Je souhaite créer un UICollectionView horizontalScrolling flowLayout habituel avec a estiméItemSize et preferredLayoutAttributesFittingAttributes dans une cellule. Mais il y a quelque chose qui ne va pas avec la dernière cellule. Toute idée où est le problème? Projet lui-même
@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:NSStringFromClass([RowCollectionViewCell class])];
}
- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 10;
}
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class]) forIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor redColor];
return cell;
}
@end
@implementation RowCollectionViewCell
- (UICollectionViewLayoutAttributes *) preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
{
[super preferredLayoutAttributesFittingAttributes:layoutAttributes];
UICollectionViewLayoutAttributes *attributes = [layoutAttributes copy];
attributes.size = CGSizeMake(80, 80);
return attributes;
}
@end
il existe une méthode simple pour résoudre ce problème. Vous pouvez ajouter un nombre de cellules prototypes pour vérifier la cellule à la position requise. Une fois que vous avez trouvé le problème dans la dernière cellule. Vérifiez les encarts de cellule dans la fenêtre Inspecteur.
Vous appelez la méthode super, mais vous n'avez pas utilisé layoutAttributes retourné.
[super preferredLayoutAttributesFittingAttributes:layoutAttributes];
Vous pouvez essayer d'imprimer layoutAttributes d'origine contre les layoutAttributes ..__ de super .. Parfois, vous n'avez pas besoin d'appeler la fonction super.
Deuxièmement, vous pouvez créer un flowlayout personnalisé ou définir un encadré pour que votre cellule s'aligne en haut. Je l'ai fait dans mon projet.
Je suis confronté à un problème similaire. Le problème a été résolu en définissant un espacement minimal approprié entre les éléments, à l'aide des méthodes de délégation - minimumInteritemSpacingForSectionAt - de UICollectionViewDelegateFlowLayout.
Vous définissez EstimatedItemSize dans l'init de la vue elle-même.
Vous devez le configurer dans un contrôleur.
Également,
Si toutes vos cellules ont la même hauteur, utilisez la propriété itemSize au lieu de cette propriété pour spécifier la taille de la cellule.
Documentation: EstimatedItemSize
J'ai réalisé un petit projet similaire (une vue de collection horizontale brute (1 * N)), voici le github J'espère que cela vous sera utile.
La taille de cellule personnalisée doit être identique à celle de la cellule de la vue de collection. Veuillez vérifier cela. Cela peut résoudre le problème pour vous.
Vous pouvez considérer cela comme une suggestion. Selon moi, la hauteur de UICollectionView
est supérieure à UICollectionViewCell
Height, c'est pourquoi cela arrive. s'il vous plaît faites les égaler