所以我遇到了一个独特的问题。我有一个可以查找的UICollectionView,只要我从中拉出的数组中至少有2个对象。
- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
NSLog(@"Allocating space for %i photos in collectionView", [CCPhotos sharedPhotos].photos.count);
return [CCPhotos sharedPhotos].photos.count;
}
// configure cells
- (UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier: @"PhotoCell" forIndexPath: indexPath];
NSLog(@"Creating cell for row %i", indexPath.row);
for (UIView* view in cell.contentView.subviews)
[view removeFromSuperview];
cell.layer.cornerRadius = 20.0f;
cell.layer.masksToBounds = YES;
// Add image to cell
UIImageView* imageView = [[UIImageView alloc] initWithImage: [[CCPhotos sharedPhotos].photos objectAtIndex: indexPath.row]];
// size imageView and set content mode
imageView.frame = cell.contentView.frame;
// add imageView to cell
[cell.contentView addSubview: imageView];
return cell;
}
始终会调用 numberOfItemsInSection
并返回正确的值,但如果它小于2,则不会调用cellForItemAtIndexPath
。有什么想法吗?
编辑: 我忘了提到我使用了我自己的流程布局来设置它:
- (id) init
{
if (self = [super init])
{
self.itemSize = CGSizeMake(ITEM_WIDTH, ITEM_HEIGHT);
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.sectionInset = UIEdgeInsetsMake(0, (320 - ITEM_WIDTH) / 2, 0, 0);
self.minimumLineSpacing = 320 - ITEM_WIDTH;
}
return self;
}
答案 0 :(得分:0)
听起来这个项目不在屏幕上,在这种情况下numberOfItemsInSection
将返回1,但不会调用cellForItemAtIndexPath
。检查你的布局。
您可以像这样覆盖layoutAttributesForElementsInRect
以验证返回的属性(如果有)。
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
NSLog(@"%@", attributes);
return attributes;
}
如果没有返回,那么这是关于布局细节(或流布局错误)的原因,导致项目出现在屏幕外。
答案 1 :(得分:0)
首先,对不起,我的英语很差!
您是否编写了集合的布局,dataSource和委托?
例如
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake(91.0f, (screenSize.height - TopNavigationBarHeight - 24.0f) / 3.0f);
flowLayout.sectionInset = UIEdgeInsetsMake(10.0f, 10.0f, 10.0f, 11.0f);
flowLayout.minimumInteritemSpacing = 10.0f;
flowLayout.minimumLineSpacing = 10.0f;
self.stepCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, TopNavigationBarHeight, screenSize.width, screenSize.height - TopNavigationBarHeight) collectionViewLayout:flowLayout];
self.stepCollectionView.dataSource = self;
self.stepCollectionView.delegate = self;
[self.stepCollectionView registerClass:[StepThumbnailCollectionViewCell class]
forCellWithReuseIdentifier:ItemIdentifier];
[self.view addSubview:self.stepCollectionView];
我希望它有所帮助。
答案 2 :(得分:0)
我弄明白了这个问题。我不确定是不是因为我在平移到照片时实现了缩放效果,但我的itemSize太大了。我将ITEM_WIDTH和ITEM_HEIGHT设置为较小的值并且有效