iOS - UICollectionView在设置为0后仍然在单元格之间有间距

时间:2015-11-23 13:40:42

标签: ios objective-c uicollectionview

在将所有内容设置为0时,我在单元格之间获得了小空格。我在cellForItemAtIndexPath中所做的就是为每个单元格设置backgroundColor

这是我的代码:

//collectionView frame
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 150) collectionViewLayout:layout];

...

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    //The cell sizes are divided by the width of the collectionView. 
    return CGSizeMake(_collectionView.frame.size.width/12, _collectionView.frame.size.width/12);
}

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

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
    return 0.0f;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 0.0f;
}

我的收藏视图如下所示。您会看到某些单元格之间存在黑线。是什么造成的?如何删除线?

enter image description here

非常感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

我也遇到了这个问题。感谢@tenric指出,对我来说是的,因为宽度不能被所需列的数量整除。我的解决方案如下:

var itemWidth: CGFloat {
    get {
        return floor(view.frame.size.width / 7)
    }
}

因为我使用AutoLayout,我只是将间隙调整到collectionView的宽度,如下所示(参见widthAnchor):

collectionView?.topAnchor.constraint(equalTo: headerSeparator.bottomAnchor).isActive = true
collectionView?.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
collectionView?.bottomAnchor.constraint(equalTo: footerSeparator.topAnchor).isActive = true

let gap = view.frame.size.width - (itemWidth * 7)
collectionViewWidthConstraint = collectionView?.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -gap)

答案 1 :(得分:0)

我也为此疯狂。我想要一个通用的解决方案,因为我的iPhone每行有3个单元,iPad每行有4个单元,而UICollectionView覆盖了整个屏幕宽度,所有设备的宽度都不同。

我最终通过使用ceil(frame.width / itemsPerRow)使单元格的组合宽度比设备屏幕宽。然后,我计算了一行中单元格的总宽度,并与屏幕宽度(view.frame)进行比较,以获得单元格将创建的宽度溢出。知道溢出后,我将UICollectionView的尾随约束设置为负溢出。这意味着UICollectionView实际上会以一个像素左右溢出屏幕宽度,但在我的情况下,这不是问题。希望下面的代码有助于澄清并让您了解如何解决这个问题。

// calculating cell width
let frame = view.frame
let cellWidth = ceil(frame.width / itemsPerRow)

// adjust UICollectionView to avoid space between cells
let totalCellsWidth = cellWidth * itemsPerRow
let overflow = totalCellsWidth - frame.width
let adjustedConstraint = -overflow
collectionViewsTrailingConstraint.constant = adjustedConstraint