Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 572
flather Avatar asked Oct 07 '13 15:10

flather


1 Answers

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.

like image 102
jrturton Avatar answered Oct 11 '22 18:10

jrturton