Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UICollectionView: reload data calls numberOfItemsInSection but not cellForItemAtIndexPath

I have a simple UICollectionView. The first time the view is loaded, cellForItemAtIndexPath is called three times and I see three cells.

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {
    NSUInteger count = ([self.results count] > 0 ? [self.results count] : 3);
    NSLog(@"count %lu", (unsigned long)count);
    return count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"cellForItemAtIndexPath called");
    UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"TasteCell" forIndexPath:indexPath];
    cell.backgroundColor = [UIColor whiteColor];
    return cell;
}

However, later self.results becomes an array of 5 elements and I call:

[self.collectionView reloadData];

When this happens, numberOfItemsInSection is called again and the "count" log statement there shows that it returns 5. However, this time, cellForItemAtIndexPath is never called, and the UI still shows the three cells from the first load.

Why is the number of cells not being updated even though the count has changed?

like image 320
theraju Avatar asked Dec 07 '14 03:12

theraju


1 Answers

I think, may be you are using the concept of static collection view cell. If its static, change it to dynamic in your xib/Storyboard.

like image 152
iDevAmit Avatar answered Oct 22 '22 00:10

iDevAmit