我很难理解NSCollectionViewLayout的prepareLayout方法的目的。
根据官方的苹果文档,它是写的 在布局过程中,收藏……
通常的事情,如果你不想要的话 prepare 每次有滚动事件时调用,都是保留CGSize实例属性并实现 shouldInvalidateLayout 只有当新的边界大小与存储的CGSize属性值不同时才返回YES。
prepare
shouldInvalidateLayout
这是一个Swift示例,但我确信您可以将其转换为Objective-C:
var oldBoundsSize = CGSize.zero override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool { let ok = newBounds.size != self.oldBoundsSize if ok { self.oldBoundsSize = newBounds.size } return ok }
所以这是我的坏事。显然,如果
- (BOOL)shouldInvalidateLayoutForBoundsChange:(NSRect)newBounds;
返回YES。然后调用此方法。我只是改变了这个方法返回NO和方法 prepareLayout 一直被叫停。
prepareLayout