使用动态大小的单元格限制 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 的数量的主要内容,如果未能解决你的问题,请参考以下文章