Search code examples
ioscollectionview

cellForItemAtIndexPath: is not called when using custom UICollectionViewLayout subclass


When using my custom UICollectionViewLayout subclass, cellForItemAtIndexPath: is not called (I checked using breakpoints and debug output). This is how i use the custom layout:

- (void)viewDidLoad
    {
        [super viewDidLoad];

        DMSGridLayout* gridLayout = [[DMSGridLayout alloc] init];

//      UICollectionViewFlowLayout* flow = [[UICollectionViewFlowLayout alloc] init];
//      [flow setItemSize:CGSizeMake(150, 150)];

        UICollectionView *collection = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:gridLayout];
        collection.delegate = self;
        collection.dataSource = self;
        self.collectionView = collection;

        [self.view addSubview:self.collectionView];
        [self.collectionView registerClass:[DMSGridCell class] forCellWithReuseIdentifier:@"CollectionCell"];
    }

But when i change the above code to use UICollectionViewFlowLayout instead of my custom subclass, cellForItemAtIndexPath: is called.

Could it be that some code from my custom layout subclass prevents cellForItemAtIndexPath from being called?


Solution

  • If the layout doesn't return any size for the collection view, for example, or any size for the layout objects, then a cell will never be created. Also, the frames in the layout objects have to be within the visible area of the collection view.