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 回答