我有一个带有自定义布局的collectionView,到目前为止我只有一个UICollectionReusableView
。起初一切正常:
prepareLayout()
来填充缓存collectionViewContentSize()
被调用并返回正确的cententSize和layoutAttributesForElementsInRect()
并返回正确的属性。 这会导致调用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()
导致问题。