6

我在UICollectionViewby subclassing中添加了装饰视图UICollectionViewFlowLayout。我m placing decoration view under each row in collection view. It工作正常。出现装饰视图。但问题是在删除一整行项目后,装饰视图没有从集合视图中删除。但是页眉和页脚视图已正确重新定位,它不是由我处理的。我不知道删除后在哪里删除装饰视图。帮我。我对装饰视图的计算prepareLayout很好,装饰视图的数量和框架是正确的

在此处输入图像描述 在此处输入图像描述

(图 1) 删除前 (图 2) 删除后

4

4 回答 4

2

我没有从任何其他来源得到答案。所以我会根据我的经验来回答。实际上,删除项目后,集合视图不会删除装饰视图的补充视图(页眉/页脚)。你必须手动完成。可能这将是collectionView中的一个错误。

在prepareLayout方法 中移除装饰视图

 /// Collection view is not removing the added decoraion views afeter deletion. Remove yourself to fix that
for (UIView *view in self.collectionView.subviews) {
    if ([view isKindOfClass:[DecorationView class]])
    {
        [view removeFromSuperview];
    }

}
于 2013-05-28T06:30:39.350 回答
2

使用方法UICollectionViewLayout删除补充/装饰视图:

func prepare(forCollectionViewUpdates updateItems: [UICollectionViewUpdateItem])

func indexPathsToDeleteForSupplementaryView(ofKind elementKind: String) -> [IndexPath]

func indexPathsToInsertForDecorationView(ofKind elementKind: String) -> [IndexPath]

如果您不熟悉它们,那么您应该仔细阅读文档

于 2017-12-05T04:32:19.657 回答
1

从 iOS 7 开始,您可以在集合视图数据更改时覆盖-indexPathsToInsertForDecorationViewOfKind:并在自定义布局中添加/删除装饰视图。-indexPathsToDeleteForDecorationViewOfKind:

于 2017-02-27T18:29:45.900 回答
0

这实际上不是一个错误。每个文档的装饰视图独立于数据源。

装饰视图是增强集合视图布局外观的视觉装饰。与单元格和补充视图不同,装饰视图仅提供视觉内容,因此独立于数据源。您可以使用它们来提供自定义背景、填充单元格周围的空间,甚至根据需要隐藏单元格。装饰视图仅由布局对象定义和管理,不与集合视图的数据源对象交互。

如果您想说,在您的集合视图后面添加背景图像,则装饰视图会更适合,它的显示保持独立于数据。

页眉、页脚和其他补充视图可以通过以下方法使用数据源进行更新:

  collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView

并且它们的定位和布局可以通过覆盖来控制

layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? 

layoutAttributesForSupplementaryViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes! 

从您的自定义流程布局中。

在我看来,解决问题的最佳方法是,如果您不想手动查找和删除装饰视图,则可以用补充视图替换装饰视图,这样就可以使用数据源对其进行更新。

于 2015-02-06T15:23:52.480 回答