Оценка UICollectionViewItemSize - последняя ячейка не выровнена
Я хочу сделать обычную горизонтальную прокрутку flowLayout UICollectionView с оценкойItemSize и preferredLayoutAttributesFittingAttributes в ячейке. Но с последней ячейкой что-то не так. Любая идея, где проблема?
Сам проект
![enter image description here]()
@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
Ответы
Ответ 1
Вы устанавливаете параметр valuItemSize в самом начале представления.
Вам нужно установить его на каком-то контроллере.
Кроме того,
Если все ваши ячейки имеют одинаковую высоту, используйте свойство itemSize вместо этого свойства, чтобы указать размер ячейки.
Документация: estimatedItemSize
Ответ 2
существует простой способ его устранения. Вы можете добавить количество прототипов для проверки ячейки в нужном месте. Как только вы обнаружите проблему в последней ячейке. Проверьте ячейки в окне Inspector.
Ответ 3
Вы вызываете метод super, но вы не использовали супер возвращенные атрибуты layoutAttributes.
[super preferredLayoutAttributesFittingAttributes:layoutAttributes];
Вы можете попробовать распечатать оригинальные атрибуты layoutAttributes vs super layoutAttributes.
Иногда вам не нужно называть суперфункцию.
Во-вторых, вы можете создать пользовательский flowlayout или установить вставку, чтобы ваша ячейка совпадала с вершиной. Я сделал это в своем проекте.
Ответ 4
Вы можете рассматривать это предложение. По моему мнению, высота UICollectionView
больше, чем UICollectionViewCell
Height, вот почему это происходит. пожалуйста, сделайте их равными им.
Ответ 5
Пользовательский размер ячейки должен быть таким же, как у ячейки коллекции, проверьте это. Это может решить проблему для вас.
Ответ 6
Я сделал аналогичный небольшой проект (один вид горизонтальной коллекции (1 * N)), вот github. Я надеюсь, что это будет полезно для вашего требования.
https://github.com/texas16/HorizontalCollectionView