获取NSCollectionViewItem的frame.size

时间:2012-07-10 18:25:21

标签: iphone ios sstoolkit

我正在使用SSToolkit / SSCollectionView,我有一个自定义的SSCollectionViewItem,但是我很难获得由SSCollectionView Delegate设置的该视图的帧大小:

- (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

2 个答案:

答案 0 :(得分:3)

这是预期的行为。所有集合视图项始终使用CGRectZero初始化,因为它们可以在具有不同项目大小的部分中重用。

SSCollectionView会在项目显示之前自动调整项目大小。如果您需要根据项目的大小进行布局,则应实施layoutSubviews

此外,您似乎正在尝试根据标识符执行不同的绘图。我强烈建议您为每个标识符创建一个不同的类,以保持清洁和可理解。

答案 1 :(得分:1)

在大多数(所有?)Cocoa框架中,直到某个时候,当视图出现在屏幕上时,帧才会被设置。如果你在一个视图中,我认为这可能是willMoveToWindow。在大多数情况下,视图几何应该由viewWillLayoutSubviews期间的ViewController或类似设置,并且子视图可以(应该)设置为使用适当的“struts和spring”(即autoresizingMask)。请参阅UIView reference page的各个部分。