objective-c - UICollectionView Decoration 和 Supplementary views 不可移动

标签 objective-c ios ipad uicollectionview

UICollectionView中的装饰和辅助 View 似乎是个大谜团。目前似乎几乎没有示例代码。我设法让这两种类型在自定义布局中工作(有关详细信息,请参阅此 post)。只要它们保持在同一位置,一切都很好(即,如果它们的 layoutAttributes.frame 没有改变)。

然而,一旦我为装饰或补充 View 使用更改的 layoutAttributes 重新布局,它们就会在视觉上重复 - 即在其原始位置的背景中有一个副本,在其新位置有一个副本地点。如果我从 XIB 实例化它们或完全在代码中实例化它们,则行为是相同的,并且正常单元格不会发生该行为。

起初我认为这是某种重绘问题,但这些“副本”在重新布局、重绘等过程中仍然存在。然而它们不是真正的副本,因为 layoutAttributesForDecorationView 等永远不会呼吁他们(仅适用于新地点)。 UICollectionView 的后台似乎有一些缓存。

有没有人有这个工作或有任何想法。我必须说我是 iOS 平台的新手,所以它也可能是简单的事情,比如设置“Clips Bound”或“Clear Graphics Context”属性(我尝试过这些,但可能是类似的东西)。

这让我发疯,奇怪的是那里绝对没有示例代码。

我在问自己:装饰和补充 View 不是要重新定位吗? (我希望不是)

最佳答案

嗨,这是一个老问题,但有一个答案。

实际上,当我实现自己的 Layout 对象时,我也遇到了这些问题,直到我意识到必须缓存您在自定义布局中创建的任何布局属性对象。实际上在文档中对此有一个非常模糊的引用(我现在不记得确切的位置)很容易被误解。

基本上,一旦您为索引路径中的单元格请求了 layoutAttributes 对象,您应该保留属性对象(例如,将其保留在具有索引路径的字典中作为键)并为任何返回相同的属性对象以及对属性的所有后续请求。如果您不这样做,而是重新创建新的布局属性,则批量更新的动画会导致严重的图形故障和伪像。

关于objective-c - UICollectionView Decoration 和 Supplementary views 不可移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857301/

相关文章:

iOS释放内存问题

objective-c - 从 NSString 中提取表情符号(unicode)

java - NSData 字节与具有相同 base64 字符串的 Java WS 中的字节不匹配

ios - 从Parse.com中的用户类删除对象

ios - 如何在 Swift 3 和 4 中为 Google Sheets API V4 发布一个值?

ipad - 我怎样才能知道Appstore应用程序的下载总数。

iphone - iPhone和iPad:通用应用程序,我的用户需要哪个操作系统版本?

iphone - 升级iOS SDK后CorePlot链接器错误

objective-c - 使用 NSOutlineView 时的 EXC_BAD_ACCESS

ios - 使用 CoreBluetooth 读取长特征值