0

所以我遇到了一个独特的问题。我有一个 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;
}
4

3 回答 3

0

听起来该项目不在屏幕上,在这种情况下numberOfItemsInSection会返回 1 但cellForItemAtIndexPath不会被调用。检查你的布局。

您可以像这样覆盖layoutAttributesForElementsInRect以验证正在返回的属性(如果有)。

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
    NSLog(@"%@", attributes);
    return attributes;
}

如果没有返回任何内容,则说明您的布局细节(或流程布局错误)导致该项目出现在屏幕外。

于 2013-08-16T02:26:23.513 回答
0

首先,对不起,我的英语很差!

您是否编写了集合的布局、数据源和委托?

例如。

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

我希望它有所帮助。

于 2013-08-16T02:48:04.850 回答
0

我解决了这个问题。我不确定是不是因为我在平移到照片时实现了缩放效果,但我的 itemSize 太大了。我将 ITEM_WIDTH 和 ITEM_HEIGHT 设置为较小的值并且它起作用了

于 2013-08-19T20:46:42.727 回答