这是我在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);
}
答案 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];