gpt4 book ai didi

ios - 为任何滚动调用 UICollectionViewLayout prepareLayout

转载 作者:可可西里 更新时间:2023-11-01 03:29:09 27 4
gpt4 key购买 nike

在实现自定义 UICollectionViewLayout 子类时发现了这种奇怪的行为。我设置了除 collectionViewContentSize 之外的子类方法。所有单元格都出现在我预期的位置,但 contentView 太长了。看起来大约是它应该的两倍。

我实现了下面的方法来获得正确的 contentSize。虽然,它现在是预期值,每次 View 滚动一个像素时都会调用 prepareLayout。这意味着如果我从 0,0 滑动到 0,500,prepareLayout 将被调用 500 次!

我的 collectionViewContentSize 是什么原因导致的?

- (CGSize)collectionViewContentSize {
UICollectionViewLayoutAttributes *leftAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:0]-1 inSection:0]];
UICollectionViewLayoutAttributes *rightAttributes = (UICollectionViewLayoutAttributes *)self.layoutInfo[@"segmentCell"][[NSIndexPath indexPathForItem:[self.collectionView numberOfItemsInSection:1]-1 inSection:1]];
float leftHeight = leftAttributes.frame.size.height + leftAttributes.frame.origin.y;
float rightHeight = rightAttributes.frame.size.height + rightAttributes.frame.origin.y;
float maxHeight = leftHeight > rightHeight ? leftHeight : rightHeight;
return CGSizeMake(self.collectionView.bounds.size.width, maxHeight);
}

最佳答案

尽管根据文档 [0] shoulInvalidateLayoutForBoundsChange: 应该默认返回 NO,但事实并非如此。一旦我实现了它并让它在所有情况下都返回 NO,prepareLayout 就不再在每次边界更改时被调用。这似乎是 UICollectionViewLayout 中的错误。

[0] http://developer.apple.com/library/ios/#documentation/uikit/reference/UICollectionViewLayout_class/Reference/Reference.html

关于ios - 为任何滚动调用 UICollectionViewLayout prepareLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15893289/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com