UICollectionView 未加载

Posted

技术标签:

【中文标题】UICollectionView 未加载【英文标题】:UICollectionView is not loading 【发布时间】:2018-01-24 08:37:33 【问题描述】:

这是我在 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);

【问题讨论】:

【参考方案1】:

此行必须在 viewDidLoad 中

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

【讨论】:

怎么做,因为如果我粘贴,这里会显示一些错误消息。 声明这一行静态 NSString *cellIdentifier = @"bannerCell";在导入下方。【参考方案2】:

问题的顺序如下两行:

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];

【讨论】:

以上是关于UICollectionView 未加载的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 未加载

从 Storyboard 加载的 UICollectionView 未正确调整大小

iOS-KVO动态监听UIScrollView的contentSize(UITableViewUICollectionView)

UICollectionView 自定义单元格未重新加载

重新加载数据后未调用 UICollectionView 数据源方法

重新加载数据后根据要求更新后未显示 uicollectionview 单元格