カスタム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);
}
あなたが実装している__shouldInvalidateLayoutForBoundsChange:__ __YES__は返すことで? –
いいえ、まだ実装していませんでした。 – brodney