在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 }