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 未加载的主要内容,如果未能解决你的问题,请参考以下文章
从 Storyboard 加载的 UICollectionView 未正确调整大小
iOS-KVO动态监听UIScrollView的contentSize(UITableViewUICollectionView)