UICollectionView estimatedItemSize – 最后一个单元格不alignment

我想通过单元格中的estimatedItemSize和preferredLayoutAttributesFittingAttributes来制作一个通常的horizo​​ntalScrolling flowLayout UICollectionView。 但是最后一个单元有问题。 任何想法在哪里是问题? 项目本身

在这里输入图像说明

@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 

您在view的init中设置estimatedItemSize。

你需要在一些控制器中设置它。

也,

如果所有单元格的高度相同,请使用itemSize属性(而不是此属性)来指定单元格大小。

文档: estimatedItemSize

有一个简单的方法来解决这个问题。 您可以添加多个原型单元格以检查所需位置的单元格。 一旦你在最后一个单元格中发现问题。 检查Inspector窗口中的单元格插入。

你调用超级方法,但是你没有使用超级返回的layoutAttributes。

  [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; 

你可以尝试打印出原始layoutAttributes与超级的layoutAttributes。 有时候,你不需要调用超级函数。

其次,您可以创build自定义的stream布局或设置插入让您的单元格alignment顶部。 我在我的项目中做了这个。

你可以考虑一个build议。 根据我的UICollectionViewCell高度超过UICollectionViewCell高度,这就是为什么发生。 请让他们与他们平等

自定义的单元格大小必须与集合视图单元格大小相同,请检查一下。它可能为您解决问题。

我做了类似的小项目(一个raw(1 * N)水平集合视图),这里是github。 我希望这会有助于您的要求。

https://github.com/texas16/Horizo​​ntalCollectionView