ios – 如何使水平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的东西的正确方法,但我是这些组件的新手.有关如何实现此目的的任何链接或建议?

最佳答案 发布在这里供将来参考,因为我一直在处理同样的问题,并找到了解决方案.

使用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

点赞