我正在尝试将水平集合视图的第一个和最后一个单元格居中。
我发现的唯一方法是在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
内容的正确方法,但我是这些组件的新手。
有关如何实现这一目标的任何链接或建议?
答案 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);
}