如何将水平UICollectionView的第一个和最后一个单元居中?

时间:2014-10-21 00:18:24

标签: ios objective-c iphone uicollectionview

我正在尝试将水平集合视图的第一个和最后一个单元格居中。

我发现的唯一方法是在UICollectionView的开头和结尾添加额外的单元格。出于显而易见的原因,这种方法完全不是一个坏主意,但我现在还没有找到更好的方法。而且,由于iPhone 6和iPhone 6+,我的视图布局完全被破坏了...(facepalm)

为了说明我的需要,我需要显示如下内容:

|        x x x x x|  where the first x represent my first cell

and

|x x x x x        |  where the last x represent my last cell


我认为使用UICollectionViewFlowLayout子类是使用contentInset内容的正确方法,但我是这些组件的新手。
有关如何实现这一目标的任何链接或建议?

2 个答案:

答案 0 :(得分:2)

在此发布以供将来参考,因为我一直在处理同样的问题,并找到了解决方案。 使用Swift 3在Xcode版本8.2.1(8C1002)中测试

UICollectionViewDelegate具有func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets

要使集合视图中的第一个和最后一个单元格居中,您可以通过以下方式计算插入:

let inset: CGFloat = collectionView.frame.width * 0.5 - cellSize.width * 0.5

在此之后,您只需返回新的UIEdgeInsetMake(0, inset, 0, inset)

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    let inset: CGFloat = collectionView.frame.width * 0.5 - cellSize.width * 0.5
    return UIEdgeInsetsMake(0, inset, 0, inset)
}

-------的 修改 -------

在这种情况下,我将单元格大小存储为硬编码值,并使用委托func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize

进行设置

答案 1 :(得分:0)

易于使用的不同部分。

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(0, collectionView.frame.size.width/2, 0, collectionView.frame.size.width/2);
}