UICollectionView未加载

时间:2018-01-24 08:37:34

标签: ios objective-c uicollectionview uicollectionviewcell

这是我在cellForItemAtIndexPath中的代码,我想要两个collectionView的加载单元格。这里第一个装载完美装载,但第二个装载正确。

} else if (collectionView == _collBanner) {

    static NSString *cellIdentifier = @"bannerCell";

    NSDictionary *dictBanner = [arrImages objectAtIndex:indexPath.row];

    BannerCollectionViewCell *cell = (BannerCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

    [collectionView registerNib:[UINib nibWithNibName:@"BannerCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:cellIdentifier];

    [cell setupBannerCell:dictBanner];

    return cell;
}
return nil;
}

我的sizeForItemAtIndexPath方法是......

} else if (collectionView == _collBanner) {

    return CGSizeMake(_collBanner.frame.size.width -5, _collBanner.frame.size.height -2);
} else
    return CGSizeMake(0, 0);
}

2 个答案:

答案 0 :(得分:0)

此行必须位于viewDidLoad

    [_collBanner registerNib:[UINib nibWithNibName:@"BannerCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:cellIdentifier];

答案 1 :(得分:0)

问题在于以下两行:

BannerCollectionViewCell *cell = (BannerCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

[collectionView registerNib:[UINib nibWithNibName:@"BannerCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:cellIdentifier];

第一个要求BannerCollectionViewCell类型的单元格,但collectionView能够将其出列,BannerCollectionViewCell必须在collectionView中注册。只有第二行将单元格类型注册到collectionView

首先,您必须将BannerCollectionViewCell类型注册到collectionView:

[collectionView registerNib:[UINib nibWithNibName:@"BannerCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:cellIdentifier];

只有这样你才能使用:

将单元格出列
BannerCollectionViewCell *cell = (BannerCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

但是,只注册一次单元就足够了,因此最好的方法是在viewDidLoad中注册单元格(将以下行从cellForItemAt移到viewDidLoad):

[collectionView registerNib:[UINib nibWithNibName:@"BannerCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:cellIdentifier];