UICollectionView布局,单元格间隔很远

时间:2012-12-19 23:11:40

标签: layout uicollectionview

我有UICollectionView显示图片。我的图像大小为114x133但由于某种原因,实际UICollectionVewCell大于此(我可以看到这个,因为我将单元格背景设置为红色)。因此,视图只能显示2个图像,两者之间存在巨大差距。我正在实施以下

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    UIImage* img = [UIImage imageNamed:@"thumbnail_frame.png"];

    return img.size;
}

- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(1, 1, 1, 1);
}

我正在以编程方式创建单元格contentview(即init imageView等)。

我在不同的视图中面临同样的问题,我以编程方式创建整个视图。我在那里:

   UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    flowLayout.minimumInteritemSpacing=10;
    flowLayout.minimumLineSpacing= 30;
    flowLayout.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5);

    if(collectionView != nil) {
        [collectionView removeFromSuperview];
    }

    CGRect frm= CGRectMake(45, 80, 250, 230);

    collectionView = [[UICollectionView alloc] initWithFrame:frm collectionViewLayout:flowLayout];//(0, 0, self.view.frame.size.width, self.view.frame.size.height) collectionViewLayout:flowLayout];
    collectionView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    collectionView.clipsToBounds = YES;
    collectionView.layer.cornerRadius = 10.0;
    collectionView.dataSource = self;
    collectionView.delegate = self;
    [collectionView registerClass:[YourPicCollectionViewCell class] forCellWithReuseIdentifier:@"YourPicCell"];

同样,两幅图像之间存在较大差距,或者如果我将宽度设置得较小,则会有3幅图像,但最右边的图像是半透明的。

我用间距修补但它似乎不起作用。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

我认为不应调整单元格的大小..您应该尝试调整集合视图的大小。确保集合视图的宽度足以容纳2个项目。这是因为如果集合视图的宽度大于单元格的宽度,那么它将坚持极右和左。如果它太短,那么中心只会显示一个单元格(假设你试图连续保留2个单元格)。

您的一个单元格中一半可见的原因是集合视图的宽度大于其超级视图。

所以做以下事情可以帮助你得到你想要的东西..

  1. 构建您的集合视图,使其小于超级视图,并且应该等于(numberOfCells X width)+((numberOfCells-1)X cellGap)。
  2. 如果是自定义集合视图单元格,请尝试向imageView添加约束,使图像粘贴到单元格边缘。