使用动态大小的单元格限制 UICollectionView 的数量

Posted

技术标签:

【中文标题】使用动态大小的单元格限制 UICollectionView 的数量【英文标题】:Limit number of UICollectionView with dynamic sized cells 【发布时间】:2016-03-17 18:46:14 【问题描述】:

我有一个视图来显示用户的音乐兴趣。由于每个兴趣的文本长度可能不同,因此我使用了 UICollectionView 来呈现这些项目。

问题是我想将列表的大小限制为 7 行。如果项目多于无法容纳,我需要在末尾显示一个项目 [...] 以表明还有更多项目。

在上面的示例中,我会将“Grimes”一词更改为“...”。

有没有什么办法,在动态大小的 UICollectionView 单元格中,知道有多少项目适合给定空间,然后才能在屏幕上呈现,从而能够将最后一个项目更改为“...”(或者通过删除多余的项目并添加一个新项目,或更新最后一个单元格标题)。

【问题讨论】:

【参考方案1】:

您还可以通过允许 collectionview 自行布置并确定它是最后一个单元格来处理它,然后在 collectionView 的 .visibleCells 数组中抓取最后一个单元格。

[self.collectionView performBatchUpdates:^
    [self.collectionView reloadData];
 completion:^(BOOL finished) 
    UICollectionViewCell *targetCell = self.collectionView.visibleCells.lastObject;
    targetCell.backgroundColor = [UIColor blueColor];//or whatever needs to change
];

【讨论】:

我同意你的回答,但是 visibleCells 没有排序,所以你需要解析最后一个单元格。 例如[self.collectionView performBatchUpdates:^ [self.collectionView reloadData]; completion:^(BOOL success) NSMutableArray *indexPaths = [[self.collectionView indexPathsForVisibleItems] mutableCopy]; [indexPaths sortUsingSelector:@selector(compare:)] ; UICollectionViewCell * cell = [self.collectionView cellForItemAtIndexPath:[indexPaths lastObject]]; cell.backgroundColor = [UIColor blueColor]; ];【参考方案2】:

我假设您已经有了计算每个项目尺寸的方法。自己实现这种行为并不难。

您需要一种方法来估计项目列表所需的大小(或行)。比如:

func preProcessList(originalList: [Item]) -> (displayList: [Item], needThreeDots: Bool) 

【讨论】:

以上是关于使用动态大小的单元格限制 UICollectionView 的数量的主要内容,如果未能解决你的问题,请参考以下文章

使用动态大小的单元格限制 UICollectionView 的数量

使用两种不同类型的单元格时如何确定集合视图的大小

swift中的自定义集合视图单元格

动态设置 UICollectionViewCell 的大小

UICollection 单元格快速混合

UICollectionView 具有自调整大小的单元格未正确计算 contentSize