在应用于单元格之前未设置自定义集合视图布局属性

时间:2014-09-23 13:58:41

标签: ios objective-c uicollectionview xcode6

我正在编写自己的自定义布局集合视图布局(对流布局进行小的自定义),并简化了我试图将UICollectionViewFlowLayoutAttributes子类化的一些事情。一切都工作得很好但是当我尝试在我的自定义单元格中应用我的布局属性时,每个属性都是零。

Cell(属性在这里都是零):

- (void)applyLayoutAttributes:(CustomLayoutAttributes *)layoutAttributes
{
    [super applyLayoutAttributes:layoutAttributes];

    NSLog(@"layoutAttributes %@", layoutAttributes.description);

}

自定义流程布局(完全应用属性!!!):

+ (Class)layoutAttributesClass
{
    return [CustomLayoutAttributes class];
}
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *attributesInRect = [super layoutAttributesForElementsInRect:rect];

    [attributesInRect enumerateObjectsUsingBlock:^(CustomLayoutAttributes *layoutAttributes, NSUInteger idx, BOOL *stop) {
        if (layoutAttributes.representedElementCategory == UICollectionElementCategoryCell) {
            [self configureLayoutAttributes:layoutAttributes];
        }
    }];

    return attributesInRect;
}

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CustomLayoutAttributes  *layoutAttributes = (CustomLayoutAttributes *)[super layoutAttributesForItemAtIndexPath:indexPath];

    if (layoutAttributes.representedElementCategory == UICollectionElementCategoryCell) {
        [self configureLayoutAttributes:layoutAttributes];
    }
    return layoutAttributes;
}

- (void)configureLayoutAttributes:(CustomLayoutAttributes *)layoutAttributes
{
    CustomCollectionView *collectionView = (CustomCollectionView *)self.collectionView;

    layoutAttributes.messageTopLabelHeight = 20.0;
    layoutAttributes.messageBottomLabelHeight = 20.0;
    layoutAttributes.messageBubbleFont = _messageBubbleFont;
}

我做错了什么或遗失了什么? :)

注意:我在故事板中创建了所有单元格,并在故事板中设置了自定义布局。

谢谢你们。

1 个答案:

答案 0 :(得分:3)

想出了问题......显然UICollectionViewLayoutAttributes必须符合NSCopying并实现copyWithZone:。在这之后一切都很完美。