0

私は現在、ちょっとしたカバーフローのような水平行が1つだけの UICollectionView をxcodeでテストしています。基本的に、セル用に独自のカスタム セル クラスと xib ファイルがあり、各セルに xib を使用して別の UIView を追加しています。理由を知りたい場合は、セルにさまざまな UIView を追加できるようにするためです。現在、1つだけ追加しています。

編集 UICollectionViewCell のラインレイアウトの作成に関する WWDC 2012 ビデオに従いましたが、1 つの違いがあります。中央のセルが大きくなる代わりに、他のすべてのセルが小さくなります。

以下のすべてが私の質問にとって新しいものです。

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {

NSArray *array = [super layoutAttributesForElementsInRect:rect];
CGRect visibleRect;
visibleRect.origin = self.collectionView.contentOffset;
visibleRect.size = self.collectionView.bounds.size;

    for (UICollectionViewLayoutAttributes *attributes in array){

    if (CGRectIntersectsRect(attributes.frame, rect)) {
        CGFloat distance = CGRectGetMidX(visibleRect) - attributes.center.x;
        CGFloat normalizedDistance = distance / ACTIVE_DISTANCE;
        if (ABS(distance) < ACTIVE_DISTANCE) {
            //THIS WOULD MAKE THE MIDDLE BIGGER
            //CGFloat zoom = 1 + ZOOM_FACTOR *(1- ABS(normalizedDistance));
            //attributes.transform3D = CATransform3DMakeScale(zoom, zoom, 1.0);
            //attributes.zIndex = round(zoom);
        } else {
            //THIS MAKES ALL THE OTHERS NOT IN THE RECT SMALLER
            CGFloat zoom = 1 + ZOOM_FACTOR *(1- ABS(normalizedDistance));
            attributes.transform3D = CATransform3DMakeScale(zoom, zoom, 1.0);
            attributes.zIndex = round(zoom);
        }
    }
}

return array;

}

問題は添付の画像で確認できます。

再利用されたセルのサイズが変更されない

ピンク = コレクション ビューのサイズ

茶色 = セルサイズ

緑 = セルのコンテンツ サイズと、コンテンツ サイズに添付された xib。

私が抱えている問題は、レイアウトにあると思います。Sell がデキューされると、上記のコードによってサイズが小さくなります。その後、再利用すると、CELL は再び大きくなりますが、コンテンツ ビューは大きくなりません。

コンテンツ ビューのフレームを手動で設定するのにうんざりしていますが、何もしません。

更新 1: これは、セル コンテンツ ビューに xib を追加した場合にも発生します。コンテンツビューにサブビューがない場合は問題ありません

UPDate 2: セルのサブビュー、私の xib のサイズが変更されていないようです。フレームサイズを手動で変更しようとしましたが、これが役立つ唯一の場所は、ハックのように感じるセル drawrect メソッドです。

4

2 に答える 2

1

再利用されたセルはそれ自体を再描画できないため、呼び出します

-(void)setFrame:(CGRect)frame {
    [super setFrame:frame];
    [self setNeedsDisplay]; // force drawRect:
}

UICollectionView の cellForItemAtIndexPath から。このリンクも見てください

そしてこの質問

于 2012-12-25T09:41:33.263 に答える
0

私の答えは非常に具体的であり、誰にも役立つかどうかはわかりません。

問題は、灰色のビューの下部に制約があったことです。この制約を以下に変更した後も、何らかの理由で機能しました。

これで、すべてのセルで発生しなかった理由が説明されていないことがわかりましたが、問題は解決しました。

そのため、検索を行ってここにたどり着いた場合は、Harsh の回答も一見の価値があるかもしれません。

編集: 6.1 で修正されたように見える 6.0 UiCollectionView コントローラーにもいくつかのバグがあるようです

于 2012-12-27T16:29:50.660 に答える