我正在使用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
答案 0 :(得分:3)
这是预期的行为。所有集合视图项始终使用CGRectZero初始化,因为它们可以在具有不同项目大小的部分中重用。
SSCollectionView会在项目显示之前自动调整项目大小。如果您需要根据项目的大小进行布局,则应实施layoutSubviews
。
此外,您似乎正在尝试根据标识符执行不同的绘图。我强烈建议您为每个标识符创建一个不同的类,以保持清洁和可理解。
答案 1 :(得分:1)
在大多数(所有?)Cocoa框架中,直到某个时候,当视图出现在屏幕上时,帧才会被设置。如果你在一个视图中,我认为这可能是willMoveToWindow
。在大多数情况下,视图几何应该由viewWillLayoutSubviews
期间的ViewController或类似设置,并且子视图可以(应该)设置为使用适当的“struts和spring”(即autoresizingMask
)。请参阅UIView reference page的各个部分。