UICollectionViewFlowLayout minimumInteritemSpacing不起作用

时间:2014-06-19 10:01:05

标签: ios objective-c cocoa-touch uicollectionview uicollectionviewlayout

我的UICollectionView遇到两个问题:

  • minimumInteritemSpacing不起作用
  • 在iOS 6上水平溢出

我设置了这样的布局:

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(70.0f, 70.0f);
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
layout.minimumLineSpacing = 0.0f;
layout.minimumInteritemSpacing = 0.0f;

_collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
// I set the size of _collectionView in layoutSubviews:
// _collectionView.frame = self.bounds;

_collectionView.contentInset = UIEdgeInsetsMake(8.0f, 8.0f, 8.0f, 8.0f);

图像显示iOS 6上的结果(在iOS 7上没有溢出,但列之间的间距仍不为零)

enter image description here

我尝试了这个解决方案https://gist.github.com/OliverLetterer/5583087,但它并没有解决我的问题。

2 个答案:

答案 0 :(得分:14)

来自minimumInterItemSpacing属性的文档:

  

对于水平滚动网格,此值表示同一列中项目之间的最小间距。此间距用于计算单行中可以容纳的项目数,但在确定项目数后,实际间距可能会向上调整。

流动布局将在整个宽度上均匀地间隔单元格,间距不小于,而不是您设置的最小值。如果您不想要间距,则需要实现自己的布局。

iOS 6溢出问题我不确定。尝试放弃对iOS 6的支持;)

答案 1 :(得分:5)

“行距”可以表示垂直行之间的间隔。

假设您有一个普通的单行水平集合视图。

(例如,整个视图的高度仅为50,而项目的宽度仅为50x50。)

正如@matt用户所解释的那样

  • 水平收集视图具有单元格列

  • Apple所说的“线条” 是单元格的垂直“线条”(!)

因此:

  • 对于只有一行的简单水平集合视图,

  • Apple所说的“行”间距是-实际上-项目之间的间距

因此令人惊讶的是,在一个只有一行的简单水平集合视图中,为了设置项目之间的间隙,它就是:

l.minimumLineSpacing = 6  // Apple means "vertical scan lines" by "lines"

({minimumInteritemSpacing在只有一行的普通简单水平集合视图中是完全没有意义的。)

这最终解释了为什么互联网上有100个页面询问为什么minimumInteritemSpacing无效。用户@matt的精彩提示