UICollectionView shows only the first item

前端 未结 4 851
灰色年华
灰色年华 2020-12-22 07:02

I\'m working on a project similar to a video album. In that I\'m using UICollectionView to display the thumb images of those videos. The worst part is that I sh

相关标签:
4条回答
  • 2020-12-22 07:21

    For those who is experiencing this problem, frame is the key. I've encountered this and changed:

    cell.imageView.frame = cell.frame;
    

    into

    cell.imageView.frame = cell.bounds;
    

    The op is using:

    cell.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(cell.frame.origin.x , cell.frame.origin.y, cell.frame.size.width, (cell.frame.size.height - cell.frame.size.height/3))];
    

    That's why this happened.

    0 讨论(0)
  • 2020-12-22 07:35

    You do not need a counter. As indicated by Wain, use indexPath.row.

    Importantly, you should not create new subviews in cellForItemAtIndexPath, but rather use this method to fill them appropriately with content. You could put the image views into your storyboard prototype cells and identify them with tags. Each cell returned from dequeueReusableCellWithReuseIdentifier will already contain the image view.

    0 讨论(0)
  • 2020-12-22 07:40

    You shouldn't be using i as a counter. The whole point of the delegate method sending you an indexPath is that it tells you what information to get from your array of source data. So, remove i and use the indexPath.row instead.

    You also don't need 2 image views. But you should probably keep your special subview and not use the cells built in image view.

    0 讨论(0)
  • 2020-12-22 07:43

    you should never create ui elements in cellForRowAtIndexPath:. Subclass a collection view cell like so:

    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            NSLog(@"INIT WITH FRAME FOR CELL");
            //we create the UIImageView here
            imageView = [[UIImageView alloc] init];
            imageView.contentMode = UIViewContentModeScaleAspectFill;
            imageView.frame = CGRectMake(cell.frame.origin.x , cell.frame.origin.y, cell.frame.size.width, (cell.frame.size.height - cell.frame.size.height/3));
            [self.contentView addSubview:imageView]; //the only place we want to do this addSubview: is here!
        }
        return self;
    }
    

    Then add that subclassed cell as a property and alter this code:]

    [collectionView registerClass:[customCellClass class] forCellWithReuseIdentifier:@"MyCell"];
    

    The perform these changes:

    -(customCellClass *) collectionView:(UICollectionView *)cV cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {
       UICollectionViewCell *cell = (customCellClass *)[cV dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath];
    
        cell.backgroundColor = [UIColor blackColor];
    
        imageView.image = [UIImage imageNamed:[storeData objectAtIndex:indexPath.row]];
    
        return cell;
    }
    

    A final adjustment would be to move the the [super viewDidLoad] to this:

    - (void)viewDidLoad
    {
         [super viewDidLoad];
         //insert the rest of the code here rather than before  viewDidLoad
    }
    
    0 讨论(0)
提交回复
热议问题