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

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

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

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

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

【问题讨论】:

    标签: ios objective-c 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) 
    

    【讨论】:

      猜你喜欢
      • 2014-07-08
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多