使用UICollectionViewFlowLayout
,我有2列 - 集合视图,效果很好。
当我需要在同一行的单元格之间保持恒定距离时,问题已经开始,当它们具有动态高度时。
所以,我有每个人都做的子类UICollectionViewFlowLayout,但是它做了什么,是为了消除下一个要加载到屏幕的单元格,所以滚动时我有空格,没有单元格,而且它们最近突然加载。看起来像
1 2
3 4
6
8
10
比,5-7-10突然出现晚了。似乎子类改变了创建单元格的委托方法,并且现在没有被调用,以加载下一个单元格。
它有什么问题吗?我挣扎了3天没有结果。 假设使间距相等(并导致问题)的子类方法
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewLayoutAttributes* currentItemAttributes = [super layoutAttributesForItemAtIndexPath:indexPath];
if (indexPath.item < numColumns)
{
CGRect f = currentItemAttributes.frame;
f.origin.y = 0;
currentItemAttributes.frame = f;
return currentItemAttributes;
}
NSIndexPath* ipPrev = [NSIndexPath indexPathForItem:indexPath.item-numColumns inSection:indexPath.section];
CGRect fPrev = [self layoutAttributesForItemAtIndexPath:ipPrev].frame;
CGFloat YPointNew = fPrev.origin.y + fPrev.size.height + 10;
CGRect f = currentItemAttributes.frame;
f.origin.y = YPointNew;
currentItemAttributes.frame = f;
return currentItemAttributes;
}
编辑!
3天后,我已经设法改变解决问题的方法,但没有任何意义。 我已将集合视图的内容高度更改为屏幕大小的6倍!这解决了这个问题。我认为我在设置流程和集合的内容方面做错了什么:
TopAlignedCollectionViewFlowLayout *layout=[[TopAlignedCollectionViewFlowLayout alloc] init];
CGRect size=CGRectMake( ([UIScreen mainScreen].bounds.size.width-collectionWidth)/2,
upperView.frame.size.height, collectionWidth, 6.5*([UIScreen mainScreen].bounds.size.height-upperLineMargin));
self.GridView=[[UICollectionView alloc] initWithFrame:size collectionViewLayout:layout];
[self.GridView registerClass:[GridCell class] forCellWithReuseIdentifier:@"Cell"];
只有现在,他才会加载所有细胞。问题是现在我无法到达集合的末尾。