2

私は SSToolkit/SSCollectionView を使用しており、カスタム SSCollectionViewItem を持っていますが、SSCollectionView デリゲートによって設定されたそのビューのフレーム サイズを取得するのに苦労しています。

- (CGSize)collectionView:(SSCollectionView *)aCollectionView itemSizeForSection:(NSUInteger)section {
return CGSizeMake(280.0f, 280.0f);
}

初期化される項目は次のとおりです。

#pragma mark - Initializer

- (id)initWithReuseIdentifier:(NSString *)aReuseIdentifier {
    if ((self = [super initWithStyle:SSCollectionViewItemStyleImage reuseIdentifier:aReuseIdentifier])) {
        if([aReuseIdentifier isEqualToString:@"featuredIdentifier"]) {
            NSLog(@"Frame: %f", self.frame.size.width);
            return self;
        } else {
            self.imageView.backgroundColor = [UIColor colorWithWhite:0.95f alpha:1.0f];
            return self;
        }

        self.imageView.backgroundColor = [UIColor colorWithWhite:0.95f alpha:1.0f];
    }
    return self;
}

NSLog(@"FRAME Width:%f", self.frame.size.width);常に 0 を返します

4

2 に答える 2

3

これは予期される動作です。すべてのコレクション ビュー アイテムは、異なるサイズのセクションで再利用できるため、常に CGRectZero で初期化されます。

SSCollectionView は、項目が表示される直前に自動的にサイズを変更します。layoutSubviewsアイテムのサイズに基づいてレイアウトを行う必要がある場合は、実装する必要があります。

また、識別子に基づいて異なる描画をしようとしているようです。識別子ごとに異なるクラスを作成して、物事をクリーンで理解しやすいものにすることを強くお勧めします。

于 2012-07-10T18:49:28.830 に答える
1

ほとんどの (すべて?) Cocoa フレームワークでは、ビューが画面に表示されるまで、フレームは設定されません。あなたがビューの中にいる場合、これは遅くなる可能性があるwillMoveToWindowと思います。ほとんどの場合、ビュー ジオメトリは ViewController の間viewWillLayoutSubviewsまたは同様に設定する必要があり、サブビューは適切な「ストラットとスプリング」(つまり ) を使用するように設定できます (する必要がありますautoresizingMask)。UIView リファレンス ページのさまざまな部分を参照してください。

于 2012-07-10T18:47:44.773 に答える