在UICollectionView的每个边缘放置一个边距

当UICollectionView被填充项时,它们总是直接到UICollectionView的边缘,如下所示:

--------------- |XXXXXXX| |XXXXXXX| |XXXXXXX| |XXXXXXX| |XXXXXXX| |XXXXXXX| --------------- 

我想在每个边缘放置一个边缘,如下所示:

 --------------- | XXXXXX | | XXXXXX | | XXXXXX | | XXXXXX | | XXXXXX | | XXXXXX | --------------- 

我试图通过将UICollectionView放置在其托pipeUIView中,通过设置其框架来模拟边框,但它在框架内滚动,因此在顶部和底部切断,滚动条也出现在框架边界。

我已经看了API,但我看不出任何明显的实现这一点。 有任何想法吗?

 (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath { } 

你可以给你的细胞在左边一些边缘。

或者您可以创build具有空白的自定义单元格。

或者你可以设置你的CollectionviewFlowLayout属性.sectionInset ,这应该是最简单的方法(如果你使用FlowLayout)

我知道这是一个老问题,但不要忘记,UICollectionViewinheritance自UIScrollView。

 UICollectionView *collectionView = [[UICollectionView alloc] init]; collectionView.contentInset = UIEdgeInsetsMake(xx, xx, xx, xx); 
 // Swift 3 for good measure let collectionView = UICollectionView() collectionView.contentInset = UIEdgeInsets(top: xx, left: xx, bottom: xx, right: xx) 

请注意,contentInset和sectionInset可能会更改视图中单元格的间距。 欲了解更多信息,请参阅这篇文章。

您可以使用以下function。

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

你将不得不玩弄数字来弄清楚如何强制collectionviewCells在一个单一的行。

 UIEdgeInsetsMake ( CGFloat top,CGFloat left,CGFloat bottom,CGFloat right); 

对于Swift 3

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { return UIEdgeInsetsMake(10, 4, 10, 4) } 

你几乎可以用collectionview的协议来控制网格的每一个方面。 这是一个例子:

 - (UICollectionViewFlowLayout *)collectionViewFlowLayout { UICollectionViewFlowLayout *flowLayout = [UICollectionViewFlowLayout new]; flowLayout.itemSize = CGSizeMake(180, 255); flowLayout.sectionInset = UIEdgeInsetsMake(10, 30, 0, 30); flowLayout.minimumInteritemSpacing = 0.0f; flowLayout.minimumLineSpacing = 0.0f; flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; return flowLayout; } 

你想要改变你的情况是sectionInsets

Swift 2.0

 self.automaticallyAdjustsScrollViewInsets = false self.collectionView.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0) 

在Xcode 8上,如果您使用界面构build器,则可以在“大小”检查器上正确设置“区域插入”:

在这里输入图像说明

在这里输入图像说明

Swift 3版本 ( Vinayak Kini答案):

 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { return UIEdgeInsetsMake(10, 10, 10, 10) //top, left, bottom, right }