我想在单元格中使用estimatedItemSize和preferredLayoutAttributesFittingAttributes制作一个通常的horizontalScrolling flowLayout UICollectionView。但最后一个细胞有问题。知道问题出在哪里? Project itself
@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
答案 0 :(得分:1)
您正在视图初始化中设置estimatedItemSize。
您需要在某个控制器中进行设置。
另外,
如果所有单元格的高度相同,请使用itemSize属性而不是此属性来指定单元格大小。
答案 1 :(得分:1)
有一种简单的方法可以解决这个问题。您可以添加多个原型单元格以检查所需位置的单元格。一旦在最后一个单元格中找到问题。检查“检查器”窗口中的单元格插图。
答案 2 :(得分:1)
你调用super方法,但你没有使用super返回的layoutAttributes。
[super preferredLayoutAttributesFittingAttributes:layoutAttributes];
您可以尝试打印原始layoutAttributes和super的layoutAttributes。 有时候,你不需要调用超级功能。
其次,您可以创建自定义flowlayout或设置插入以让您的单元格对齐顶部。我在我的项目中做到了这一点。
答案 3 :(得分:1)
我遇到了类似的问题,并且使用UICollectionViewDelegateFlowLayout的委托方法-minimumInteritemSpacingForSectionAt-提供了适当的最小项间间距,从而解决了该问题。
答案 4 :(得分:0)
您可以将其视为建议。据我所知UICollectionView
的高度超过UICollectionViewCell
高度,这就是它发生的原因。请让他们平等他们
答案 5 :(得分:0)
自定义单元格大小必须与集合视图单元格大小相同,请检查。它可以为您解决问题。
答案 6 :(得分:0)
我做了类似的小项目(一个原始(1 * N)水平集合视图),这里是github。我希望这对你的要求有所帮助。
答案 7 :(得分:-1)
有同样的问题,在我的情况下修复它是为了确保:
所有单元格高度相等。
collectionView高度大于单元格高度+单元格之间的空间。