Dmi*_*pov 8 ios uicollectionview uicollectionviewcell uicollectionviewlayout uicollectionviewdelegate
预设,
我有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;
}
Run Code Online (Sandbox Code Playgroud)
CollectionView旋转到倒置滚动
self.collectionView.transform = CGAffineTransformMakeRotation((CGFloat)M_PI);
Run Code Online (Sandbox Code Playgroud)
但即使jus使用本机collectionViewFlowLayout而没有子类化,也就是git这个错误
问题
我在聊天中有两条消息,但是当在底部滚动(通常是顶部)消失第二项时.
给定rect的layoutAttributesForElementsInRect为两个indexPaths 0-0和0-1返回两个属性,但委托方法
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
仅调用indexPath 0-0
这里的图片
更新 所以我发现为什么会发生 - 这个行代码
attr.transform = CGAffineTransformMakeRotation((CGFloat)M_PI);
Run Code Online (Sandbox Code Playgroud)
看看是否删除转换
抱歉,大家,但我找到了原因并解决了问题。
这种情况仅发生在设备上而不是模拟器上
看三个CGRect
iPhone 5S
(CGRect) oldFrame = (origin = (x = -0.000000000000056843418860808015, y = 0), size = (width = 320.00000000000006, height = 314.00000000000006))
Run Code Online (Sandbox Code Playgroud)
iPhone 5C
(CGRect) oldFrame = (原点 = (x = 0, y = 0), 大小 = (宽度 = 320, 高度 = 314))
模拟器英特尔酷睿
(CGRect) oldFrame = (origin = (x = 0, y = 0), size = (width = 320, height = 314))
Run Code Online (Sandbox Code Playgroud)
对于他们所有人,我通过以下方式应用旋转变换
CGAffineTransformMakeRotation((CGFloat)M_PI)
Run Code Online (Sandbox Code Playgroud)
首先是在 iPhone 5S ARM Apple A7 CPU上
其次是 iPhone 5C ARM Apple A6 CPU
第三是在 Intel Core iX 处理器的模拟器上。
所以,我的解决方法是:
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewLayoutAttributes *retAttr = [super layoutAttributesForItemAtIndexPath:indexPath];
if (CGAffineTransformIsIdentity(retAttr.transform)) {
retAttr.transform = CGAffineTransformMakeRotation((CGFloat)M_PI);
}
CGRect oldFrame = retAttr.frame;
oldFrame.origin.x = retAttr.frame.origin.x > 0 ?: 0;
retAttr.frame = oldFrame;
return retAttr;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |