我正在尝试实现一个自定义UICollectionView,它显示资产库中的所有元素。虽然显示这些项目并不是什么大不了的事情,但我遇到了一个奇怪的错误,我认为它必须对我正在使用的布局做些什么。
让我们从一些屏幕截图开始,说明发生了什么。我只是在滚轮上发布这些图像的链接: - )
1。初始
https://dl.dropboxusercontent.com/u/607872/stackoverflow/01-uicollectionview-start.png
一切都好。
2。向下滚动
https://dl.dropboxusercontent.com/u/607872/stackoverflow/02-uicollectionview-scrolleddown.png
第一行(不再可见)中的图像在最后一行的图像后面重复。第一个是不可见的,因为它完全重叠。
第3。再次滚动
https://dl.dropboxusercontent.com/u/607872/stackoverflow/03-uicollectionview-scrollup.png
第一张图片(在背景中)来自同一行,但应该是第三张。第2张和第3张图片来自最后一行。
这是一些代码。我希望我没有错过任何相关的东西 - 如果是的话,请告诉我。
MultiImagePickerController.m(:UICollectionViewController,protocols:UICollectionViewDataSource,UICollectionViewDelegateFlowLayout)
- (void)loadView {
[...] // layout stuff
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
[layout setScrollDirection:UICollectionViewScrollDirectionVertical];
_collectionView = [[UICollectionView alloc] initWithFrame:collectionRect collectionViewLayout:layout];
[_collectionView setDataSource:self];
[_collectionView setDelegate:self];
[_collectionView registerClass:[MultiImagePickerCell class] forCellWithReuseIdentifier:@"MultiImagePickerCellIdentifier"];
[_collectionView setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:_collectionView];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MultiImagePickerCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MultiImagePickerCellIdentifier" forIndexPath:indexPath];
if ( !cell ) {
CGSize sizeCell = [MultiImagePickerCell defaultSize];
cell = [[MultiImagePickerCell alloc] initWithFrame:CGRectMake( 0, 0, sizeCell.width, sizeCell.height )];
}
NSString *groupname = [self getKeyFromMutableDictionary:assetList forIndex:indexPath.section];
[cell addImageUsingAsset:[[assetList objectForKey:groupname] objectAtIndex:indexPath.row]];
return cell;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
CGSize sizeCell = [MultiImagePickerCell defaultSize];
return CGSizeMake( sizeCell.width + 10.0, sizeCell.height + 10.0 );
}
MultiImagePickerCell - (void)addImageUsingAsset:(ALAsset *)asset;
此方法向单元格添加UIImageView和UIImage以显示资产。在我看来,没什么特别的。当我在cellForItemAtIndexPath中设置断点时,我可以看到正在从assetList读取正确的资产,并且正确计算了视图。没有实现单元格的drawRect方法。
我认为几年前我尝试以编程方式创建UITableViewController时遇到了同样的问题,但我不记得我是如何解决它的。
有什么建议吗?
答案 0 :(得分:0)
知道了 - 我必须从我的单元格中删除子视图。