UICollectionView,UICollectionViewFlowLayout:不同的单元格宽度和相同的单元格之间定义的间距

Posted

技术标签:

【中文标题】UICollectionView,UICollectionViewFlowLayout:不同的单元格宽度和相同的单元格之间定义的间距【英文标题】:UICollectionView, UICollectionViewFlowLayout: different cells width and same defined spacing between cells 【发布时间】:2013-05-21 20:50:34 【问题描述】:

我重载了UICollectionViewFlowLayout,使其在每个UICollectionViewCell 中都有一个包含UIImages 的水平行滑块。

在重载的UICollectionViewFlowLayout 中,我将minimumLineSpacing 设置为0,以使UICollectionViewCells 之间没有间距。 (默认为 10 像素)

如果每个单元格的宽度相同,0px的间距会正确显示

如果单元格的宽度更大,则不再考虑 0px,并应用单元格之间的默认 10px..

我尝试实现以下方法但结果相同...

- (CGFloat)collectionView:(UICollectionView *)collectionView 
           layout:(UICollectionViewLayout*)collectionViewLayout 
           minimumLineSpacingForSectionAtIndex:(NSInteger)section 
    return 0.0;

这是一个错误吗? 在不同宽度的UICollectionViewCells 之间获得 0px 间距的“技巧”是什么?

【问题讨论】:

【参考方案1】:

    这是一个错误吗? 没有 这不是错误,它是UICollectionViewFlowLayout 的默认行为。流式布局是一种换行布局,这意味着它会将所有单元格沿一条直线放置并在屏幕上排列。一旦它填满一行(没有新项目的空间),它将打破这一行并进入下一个。 UICollectionViewFlowLayout 保证 minimumLineSpacing 不准确。如果您的项目大小不同,则流程布局以保持最小行距的方式排列单元格。所以线的大小可能会增加,但绝不会低于您之前设置的值。

    我认为流式布局不可能,您应该使用一种自定义布局。检查this我不确定是否可以将间距设置为零试试JSPrintDemo

【讨论】:

我花了几个小时试图让 UICollectionViewFlowLayout 与我合作,最后我放弃并制作了自己的 UICollectionViewLayout,主要使用这里的教程:skeuo.com/uicollectionview-custom-layout-tutorial ...但是,我也需要可变宽度的单元格,我不知道如何做到这一点。您链接中的代码帮助我解决了这个问题,特别是在这里:github.com/jayslu/JSPintDemo/blob/master/JSPintDemo/…

以上是关于UICollectionView,UICollectionViewFlowLayout:不同的单元格宽度和相同的单元格之间定义的间距的主要内容,如果未能解决你的问题,请参考以下文章

动态 UICollectionView 单元格框架

UICollectionView cellForIndexPath 返回错误值

iOS——UICollectionView

为 uicollectionView 单元格设置比例大小?

Uicollectionview 单元格仅环绕文本

UICollectionView:添加单元格后内容偏移错误