UICollectionView:reloadData()导致单元格消失

时间:2016-05-23 13:49:10

标签: ios swift uicollectionview uicollectionviewlayout

我有一个带有自定义布局的collectionView,到目前为止我只有一个UICollectionReusableView。起初一切正常:

    调用
  1. prepareLayout()来填充缓存
  2. collectionViewContentSize()被调用并返回正确的cententSize和
  3. 调用
  4. layoutAttributesForElementsInRect()并返回正确的属性。
  5. 这会导致调用collectionView的viewForSupplementaryElementOfKind - 方法,之后视图变为可见。

    稍后,当我按下按钮时,可重复使用视图的大小会更改,并且会调用collectionView.reloadData()。这会导致再次调用上面提到的3个方法,并且它们仍然会返回具有新大小的正确值,但这次它不会触发viewForSupplementaryElementOfKind,并且collectionView变为空。

    为什么没有viewForSupplementaryElementOfKind被召唤?

    调试示例:

    第一次收集视图布局时layoutAttributesForElementsInRect的返回(即工作时)

    layout attributes: [<UICollectionViewLayoutAttributes: 0x7fa5005dc970> index path: (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}); element kind: (UICollectionElementKindSectionHeader); frame = (0 0; 414 1106); ]
    

    第二次收集视图布局时layoutAttributesForElementsInRect的返回(即,当它确实有效时)

    layout attributes: [<UICollectionViewLayoutAttributes: 0x7fa500708f00> index path: (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}); element kind: (UICollectionElementKindSectionHeader); frame = (0 0; 414 1560.67); ]
    

    编辑:调试:

    我刚刚使用collectionView.reloadData()进行了测试,但未更改视图的大小。这导致了同样的问题,清除了集合视图。因此,我不会改变导致问题的属性。

    编辑2:更多调试:

    我尝试使用collectionView.collectionViewLayout.invalidateLayout()代替og reloadData()。这次我可以看到细胞的新大小正确变化。但是当我之后打电话给reloadData()时,我也会遇到同样的问题。让我更有信心reloadData()导致问题。

0 个答案:

没有答案