简体   繁体   中英

subView in UICollectionViewCell displayed wrong when UICollectionView scrolled

I make a custom UICollectionViewCell and add a subView to its contentView:

BooksCell.h

@interface BooksCell : UICollectionViewCell
@property (strong, nonatomic) UIImageView *certifyImageView;
@end

BooksCell.m

- (id)initWithFrame:(CGRect)frame {
    self= [super initWithFrame:frame];
    if(self){
        _coverImageView = [[UIImageView alloc] initWithFrame:CGRectMake(15, 15, 88, 117)];
        _coverImageView.userInteractionEnabled = YES;
        [self.contentView addSubview:_coverImageView];

        UIImage *certifyImage = [UIImage imageNamed:@"13-6.png"];
        _certifyImageView = [[UIImageView alloc] initWithFrame:CGRectMake(17.5, _coverImageView.frame.size.height-3, certifyImage.size.width, certifyImage.size.height)];
        _certifyImageView.image = certifyImage;
        _certifyImageView.hidden = YES;
    }
    return self;
}

ViewController

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    BooksCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"BooksCell" forIndexPath:indexPath];
    cell.coverImageView.image = [UIImage imageNamed:@"13-5.png"];

   // **Here I want some cell display certifyImageView and some not.**
    if(indexPath.row%2==0){
        cell.certifyImageView.hidden = NO;
    }

    return cell;
}

I add the collectionView as subView to the Viewcontroller , and set it's frame correctly, now the collectionView displaied coverImageView and certifyImageView normally, but when I scroll the collectionView, certifyImageView displaied on the wrong cell,I guess it maybe caused by the Reuse Cell , and how to sole it?

I think because it is reusing the cell that already set the certifyImageView.hidden to NO so you have to set it back to YES Maybe try this

if(indexPath.row%2==0){
        cell.certifyImageView.hidden = NO;
    }
else{
       cell.certifyImageView.hidden = YES;
}

This way you will make sure that the certifyImageView will be set to hidden if thats what you want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM