CollectionView 与单元格重叠

Posted

技术标签:

【中文标题】CollectionView 与单元格重叠【英文标题】:CollectionView is overlaping the cells 【发布时间】:2012-11-19 11:21:01 【问题描述】:

我的目标是在我的视图底部有一个集合视图。单元格中充满了照片库中的照片。我不知道为什么,但细胞相互重叠。有人知道为什么吗?这是来自 ViewController 的代码:

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView

    return 1;


- (NSInteger)collectionView:(UICollectionView *)collectionView
     numberOfItemsInSection:(NSInteger)section


    return [self.fotoArray count];



- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath

    static NSString *cellIdentifier = @"foto_cell";

    FotoCell *cell = [self.collectionView
                        dequeueReusableCellWithReuseIdentifier:cellIdentifier
                        forIndexPath:indexPath];

    Foto *currFoto = [self.fotoArray objectAtIndex:indexPath.row];
    // Set the selectedFotoID 
    [CoreDataManager sharedInstance].selectedFotoId = ((Foto*)[self.fotoArray objectAtIndex:indexPath.row]).objectID;
    NSURL *u = [NSURL URLWithString:currFoto.f_path];
    [self findImage:u in: cell];


    return cell;


// Get Photo from Asset Library
-(void)findImage:(NSURL*)u in: (FotoCell*) cell


    __block FotoCell *blockCell = cell;
    //
    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    
        ALAssetRepresentation *rep = [myasset defaultRepresentation];
        CGImageRef iref = [rep fullResolutionImage];
        if (iref) 
            UIImage *largeimage = [UIImage imageWithCGImage:iref];
            //[largeimage retain];
            UIImage *thumbnail = [UIImage imageWithCGImage:iref scale:0.15 orientation:UIImageOrientationUp];
            [blockCell.fotoThumb setImage:thumbnail];
        
    ;

    //
    ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
    
        NSLog(@"cant get image - %@",[myerror localizedDescription]);
    ;



        NSURL *asseturl = u;
        ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
        [assetslibrary assetForURL:asseturl
                       resultBlock:resultblock
                      failureBlock:failureblock];


这里是我的 Cell.m 类的代码:

@implementation FotoCell

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        // Initialization code
    
    return self;




- (void)dealloc 
    [_fotoThumb release];
    [super dealloc];

@end

【问题讨论】:

【参考方案1】:

我不清楚你的代码。但我以前遇到过这个问题。 原因是您在 cellForItemAtIndexPath 中添加了可见视图(如图像、UILabel、...):

collectionView 序列时,所有 Cell 视图在滚动时重叠在一起。

您可以尝试在您的 Cell 中初始化和 imageView,然后在 cellForItemAtIndexPath 中设置图像名称

【讨论】:

【参考方案2】:

您必须设置UICollectionViewFlowLayout 实例的itemSize

【讨论】:

感谢您的回答,顺便说一句,我喜欢您的博客...我的 ViewController 和 viewDidLoad 方法中有这个:[self.collectionView registerClass:[FotoCell class] forCellWithReuseIdentifier:@"cell"];但它仍然无法正常工作:( UICollectionViewFlowLayout *myLayout = [[[UICollectionViewFlowLayout alloc]init]autorelease]; [myLayout setItemSize:CGSizeMake(48, 48)]; [myLayout setScrollDirection:UICollectionViewScrollDirectionHorizo​​ntal]; [self.collectionView setCollectionViewLayout:myLayout] ;

以上是关于CollectionView 与单元格重叠的主要内容,如果未能解决你的问题,请参考以下文章

与 collectionView.reloadItems[at: [indexPath]] 重叠标签值

像这样的 CollectionView 堆叠单元如何存档,用于重叠单元,如钱包

重叠的 UICollectionView 单元格

UICollectionView 单元格与 Header 重叠

当我使用按钮增加单元格高度时,UICollectionView 单元格相互重叠

我的应用程序启动时如何显示集合视图的中间单元格