【问题标题】:Collection View inside Table View Cell Slow Scroll Performance表视图单元格内的集合视图慢滚动性能
【发布时间】:2017-10-26 18:16:37
【问题描述】:

我已经检查过,在 stackoverflow 和我搜索的许多网站上尝试了许多解决方案。

我的问题:我在表格视图单元格中有一个集合视图。我的数据必须在表视图 (viewdidload) 中加载 1 次。

当我将数据传递到表格单元格内的集合视图时,它没有出现,因为我需要再次重新加载集合视图。

所以我这样做:数据 -> 在表格视图的 cellforrow 内 -> 传递到集合视图 -> cell.collectionView.reloadData()

这会导致滚动性能问题: collectionView.reloadData() 在我滚动时一遍又一遍地调用(这是因为表格视图的可重复单元格架构。

这是我在 tableView 的 cellforrow 中的代码:

let cell = tableView.dequeueReusableCell(withIdentifier: SubCategoryCellID) as! SubCategoryCell
        if isFetched {
            cell.shimmeringView.isShimmering = false
            cell.shimmeringImageView.isHidden = true
            cell.shimmeringView.isHidden = true
            cell.listLocation = nestedSubLocation[indexPath.item]
            cell.collectionView.reloadData()
        }else {
            return cell
        }

我尝试过的解决方案: + 创建静态单元格并让单元格显示在 cellForRow 中(它完全修复了滚动性能,但我认为它不利于内存管理,如果父级是集合视图,它就不起作用)。 + 滚动停止时重新加载数据:第一次加载仍然需要重新加载数据,如果我不重新加载,则数据错误。

要解决这个问题,有人有聪明的方法来修复滚动性能吗?

【问题讨论】:

    标签: ios swift collectionview


    【解决方案1】:

    将此代码放在cell.collectionView.reloadData()之后

    cell.collectionView.scrollRectToVisible(CGRect.zero, animated: false)
    

    【讨论】:

    • 很好的解决方案,你能解释一下这实际上是如何工作的吗?
    • @inokey 此方法滚动内容视图,以便 rect 定义的区域在滚动视图中可见。如果该区域已经可见,则该方法不执行任何操作。 Refer this
    • 我已经尝试过您的解决方案,但它只消除了模拟器中的滞后。测试设备仍然无法足够快地处理这个。但是我的问题在集合视图的深处,在构建单元本身时,所以我想你的解决方案将适用于大多数轻量级情况。感谢您的回复!
    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多