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 内调整大小