UICollectionViewCell 未在 indexpath.row == 0 上绘制单元格

Posted

技术标签:

【中文标题】UICollectionViewCell 未在 indexpath.row == 0 上绘制单元格【英文标题】:UICollectionViewCell Not drawing cell on indexpath.row == 0 【发布时间】:2014-05-19 01:40:26 【问题描述】:

见附图。

我正在使用一个相当基本的 UIFlowLayout 子类来伴随视图,但无论我尝试了什么,它都认为它不需要绘制单元格 0,

但是,如果我向下滚动并向后滚动,它会正确绘制它。

这似乎是一个 ios SDK 错误,但需要进一步调查。只是想知道是否有人知道有什么想法可以尝试一下。

【问题讨论】:

我们可能需要查看一些代码。我从来没有遇到过这个问题。 【参考方案1】:

这个答案实际上有助于解决它:

UICollectionView flowLayout not wrapping cells correctly (iOS)1

但我的情况是独一无二的,因为我使用 UIDynamicAnimator 来计算布局属性。

所以我的代码是从这里开始的:

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

    return [self.dynamicAnimator itemsInRect:rect];


-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath

    return [self.dynamicAnimator layoutAttributesForCellAtIndexPath:indexPath];


- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

    return [self.dynamicAnimator layoutAttributesForSupplementaryViewOfKind: kind atIndexPath:indexPath];

到这里:

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

    NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
    NSMutableArray *newAttributes = [NSMutableArray arrayWithCapacity:attributes.count];
    for (UICollectionViewLayoutAttributes *attribute in attributes) 
        if ((attribute.frame.origin.x + attribute.frame.size.width <= self.collectionViewContentSize.width) &&
            (attribute.frame.origin.y + attribute.frame.size.height <= self.collectionViewContentSize.height)) 
            [newAttributes addObject:attribute];
        
    
    return newAttributes;


-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath

    return [self.dynamicAnimator layoutAttributesForCellAtIndexPath:indexPath];


- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

    return [self.dynamicAnimator layoutAttributesForSupplementaryViewOfKind: kind atIndexPath:indexPath];

问题解决了!我的代码中的逻辑是合理的 -(BOOL)shouldInvalidateLayoutForBoundsChange 做错了什么,但我已经检查过了,逻辑看起来很好。

【讨论】:

以上是关于UICollectionViewCell 未在 indexpath.row == 0 上绘制单元格的主要内容,如果未能解决你的问题,请参考以下文章

在第一个实例上,内容未在 UICollectionViewCell 内调整大小

UICollectionViewCell 未在 indexpath.row == 0 上绘制单元格

嵌套集合视图单元格未在方向更改时调整大小

Xcode @ 2x图像后缀未在iOS中显示为Retina

什么是 C++ 中的“变量‘i’未在范围内声明”?

图像未在 Flutter 中加载