预设,
我有collectionViewFlowLayout子类
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { return YES; } - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect { NSArray *arr = [super layoutAttributesForElementsInRect:rect]; BBLog(@"ARRA:%@",arr); for (UICollectionViewLayoutAttributes *attr in arr) { if (CGAffineTransformIsIdentity(attr.transform)) { attr.transform = CGAffineTransformMakeRotation((CGFloat)M_PI); } } return arr; }
CollectionView旋转到颠倒滚动
self.collectionView.transform = CGAffineTransformMakeRotation((CGFloat)M_PI);
但即使jus使用本机collectionViewFlowLayout而没有子类化,也就是git这个错误
问题
我在聊天中有两条消息,但是当在底部滚动(通常是顶部)消失第二项时.
给定rect的layoutAttributesForElementsInRect为两个indexPaths 0-0和0-1返回两个属性,但委托方法
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
仅为indexPath 0-0调用
这里的图片
UPDATE
所以我发现它为什么会发生 – 这个行代码
attr.transform = CGAffineTransformMakeRotation((CGFloat)M_PI);
看看是否删除转换
解决方法
我不完全确定,但我认为,当你是UICollectionViewFlowLayout的子类时,你不应该直接修改属性,而是要复制属性,修改它并返回它.
顶级声明的简短说明:
您必须继承UICollectionViewFlowDelegate(UICollectionViewDelegateFlowLayout的父级),然后创建自己的属性并根据需要修改它们,但这需要实现更多的自定义逻辑.
另请查看您是否在控制台中收到任何错误或警告.
看看这个问题:Warning: UICollectionViewFlowLayout has cached frame mismatch for index path ‘abc’
希望我至少有一点帮助.