UICollectionView上的reloadData()使用动态单元格更改contenteOffset

时间:2018-09-25 19:55:09

标签: swift uicollectionview uicollectionviewcell

我刚刚更新了适用于iOS 12的应用程序,但是我的collectionView发现了此问题。我在我的collectionView子类上以这种方式使用了自调整大小的单元格:

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    layout.estimatedItemSize = CGSize(width: collectionView.frame.width, height: 44)
    layout.itemSize = UICollectionViewFlowLayout.automaticSize
}

当我调用reloadData()时,contentOffset会在不需要的地方进行更改。我通过覆盖reloadData()尝试了一种在iOS 11上运行良好的解决方法:

override func reloadData() {
    let oldOffset = contentOffset

    super.reloadData()
    layoutSubviews() // This line do the job with iOS 11.

    self.setContentOffset(oldOffset, animated: false)
}

但是在iOS 12上它不再起作用,并且在调用reloadData()时contentOffset被完全破坏了 我还尝试了invalidateLayout()而不是layoutSubviews(),但也无法正常工作。

有人可以向我解释原因并给我潜在的解决方案吗?

谢谢

0 个答案:

没有答案