CollectionView布局

时间:2016-03-10 14:56:01

标签: ios objective-c uicollectionview uicollectionviewcell

我已经研究了一段时间了,无法弄清楚如何让我的细胞正确显示。关于此问题有很多Stack Overflow问题,但我似乎无法弄清楚我的情况。我在UITableViewController之上有一个CollectionView(不在表视图单元格内)。我正在尝试让我的集合视图单元格显示3个水平行,我需要它来调整到不同的iPhone& iPad屏幕尺寸。我附上了两张照片。一个显示我的故事板视图控制器,另一个显示模拟器的显示方式。单元格行之间总是有很大的间隙。我希望它像网格一样显示(如iPhone照片应用程序)。以下是我的UICollectionView的以下代码:

 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return _foursquarePhotoArray.count;
}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"photoCell";

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

UIImageView *wineryImageView = (UIImageView *)[cell viewWithTag:100];

Photo *photo = [_foursquarePhotoArray objectAtIndex:indexPath.row];

dispatch_async(dispatch_get_main_queue(), ^{
    [wineryImageView setImageWithURL:[NSURL URLWithString:photo.photoURLString] placeholderImage:[UIImage imageNamed:@"Grapes"]];
});

return cell;

}

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

int numberOfCellInRow = 5;
CGFloat cellWidth = collectionView.bounds.size.width/numberOfCellInRow;

   return CGSizeMake(cellWidth, cellWidth);
}

enter image description here enter image description here

3 个答案:

答案 0 :(得分:0)

试试这个:

- (CGFloat) collectionView:(UICollectionView *)collectionView layout:(UICollectionView *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 0; // This is the minimum inter line spacing, can be more
}

答案 1 :(得分:0)

如果您使用的是UICollectionViewFlowLayout(不是自定义布局),您可以在视图控制器中通过collectionView(类似self.collectionView.collectionViewLayout)来调整布局的属性,尤其是查看minimumInteritemSpacingminimumLineSpacing属性。

minimumInteritemSpacingminimumLineSpacing控制与布局的scrollDirection相关的不同空格,因此您可以尝试将它们都设置为0,或者仅调整它们两者。

如果您的收藏夹视图中有一个笔尖/故事板,并且没有使用自定义布局,那么您可以在尺寸检查器中调整这些值:

就在这里 - > enter image description here

我不确定我是否理解正确,但您是否也对细胞的大小有问题,还是只是侧面信息?

答案 2 :(得分:0)

您需要做的是根据需要设置最小间距(首先检查它是否为0 0),还要添加单元格的高度和宽度,如下所示: -

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize{

        return CGSizeMake(collectionView.frame.size.width/5, collectionView.frame.size.height/3)

}

同时检查你对imageView的约束是0,0,0,0(顶部,底部,前导,尾随)。

注意: - 如果你在min间距中放入一些值,那么你必须从单元格的大小减去它,例如,如果你将2作为单元格的最小间距,然后从宽度减小它(collectionView .frame.size.width / 5 - 2)并假设你为行的最小间距取3,然后从高度减去它(collectionView.frame.size.height / 5 - 3)。基本上“对于单元”是水平行中单元之间的间隔,而“对于行”是垂直列中单元之间的间隔。