2013-04-09 13 views
6

カスタムUICollectionViewLayoutサブクラスを実装する際にこの奇妙な動作が検出されました。 collectionViewContentSizeを除いてサブクラスのメソッドを設定しました。私が期待した場所にすべての細胞が現れたが、contentViewが長すぎた。それが何をすべきかについて倍増するように見えた。UICollectionViewLayoutスクロールのためにprepareLayoutが呼び出されます

私は以下のメソッドを実装して、正しいcontentSizeを取得しました。ビューが1ピクセルスクロールするたびに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

あなたが実装している__shouldInvalidateLayoutForBoundsChange:__ __YES__は返すことで? –

+0

いいえ、まだ実装していませんでした。 – brodney

答えて

6

ドキュメントによれば、[0] shoulInvalidateLayoutForBoundsChange:は、デフォルトではNOを返すことになっているが、それはなかったです。いったん実装してすべてのケースでNOを返すと、境界変更ごとにprepareLayoutは呼び出されなくなりました。 UICollectionViewLayoutのバグのようです。

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

関連する問題