iOS- applyLayoutAttributes未被调用为某些单元格

问题描述 投票:6回答:2

我正在创建一个类似于iOS中的跳板屏幕的视图。 (这是对this question的后续问题)。我的实现是一个集合视图,该视图使用UICollectionViewLayout具有自定义布局。此布局是根据this answer中发布的代码构建的。由于我想晃动我的图标,并在左上角有一个删除按钮,因此我将UICollectionViewLayoutAttributes子类化,并具有一个新属性deleteButtonHidden。所有这些都可以很好地协同工作。但是当我在集合视图中填充更多图标以适合一页时,我遇到了问题。当我进入编辑模式并来回滚动时,我发现某些图标不再晃动。我尝试调试它,但我意识到我的某些单元格未调用applyLayoutAttributes方法。我也尝试在方法scrollViewDidScroll内调用invalidateLayout,但这没有帮助。

有人知道为什么有些单元格无法应用其属性吗?

UPDATE:我刚刚发现,Apple有一个patent用于微动图标。因此,实施该设计将不会得到批准。因此,这个问题不再重要。

ios uicollectionviewlayout
2个回答
5
投票
UICollectionViewLayoutAttributes时应实现isEqual:方法。

如果子类化并实现任何自定义布局属性,则还必须重写继承的isEqual:方法以比较属性的值。在iOS 7及更高版本中,如果集合属性未更改,则集合视图不应用布局属性。它通过使用isEqual:方法比较旧属性对象和新属性对象来确定属性是否已更改。因为此方法的默认实现仅检查此类的现有属性,所以您必须实现自己的方法版本以比较任何其他属性。如果您的自定义属性都相等,请调用super并在实现结束时返回结果值。

希望对您有帮助。

3
投票
UICollectionViewLayoutAttributes,则需要在子类中实现

copyWithZone:,因为超类会实现它。

因此只需添加您的copyWithZone:实现,它就可以正常工作。
© www.soinside.com 2019 - 2024. All rights reserved.