3

我正在尝试偏移所选单元格下方所有单元格的 y 轴中心。我向子类添加了一个属性CollectionViewFlowLayout,称为extendedCell,它标记了我应该抵消其他所有内容的单元格。

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
    if(!self.extendedCell)
    {
        return attributes;
    }
    else
    {
        return [self offsetCells:attributes];
    }
}

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewLayoutAttributes *attribute = [super layoutAttributesForItemAtIndexPath:indexPath];
    if(!self.extendedCell)
    {
        return attribute;
    }
    else
    {
        if(![attribute.indexPath isEqual:self.extendedCell] &&
           attribute.center.y >= [super layoutAttributesForItemAtIndexPath:self.extendedCell].center.y)
        {
            CGPoint newCenter = CGPointMake(attribute.center.x,
                                            attribute.center.y + 180.f);
            attribute.center = newCenter;
        }

        return attribute;
    }
}

-(NSArray *)offsetCells:(NSArray *)layoutAttributes
{
    for(UICollectionViewLayoutAttributes *attribute in layoutAttributes)
    {
        if(![attribute.indexPath isEqual:self.extendedCell] &&
           attribute.center.y >= [super layoutAttributesForItemAtIndexPath:self.extendedCell].center.y)
        {
            CGPoint newCenter = CGPointMake(attribute.center.x,
                                            attribute.center.y + 180.0f);
            attribute.center = newCenter;
        }
    }

    return layoutAttributes;
}

结果发现途中发生了一些不好的事情,因为底部的单元格消失了。我有一种感觉,这与单元格超出UICollectionView内容大小有关,但是在生成布局时设置大小并没有帮助。任何想法如何解决这种消失?

4

3 回答 3

1

好吧,原来我发现了这个错误。似乎覆盖 -(CGSize)collectionViewContentSize 有帮助。如果任何单元格位于集合视图的内容大小之外,它们就会消失。由于在调用任何布局属性之前已经设置好内容大小,并且不允许将单元格放置在它之外,因此集合视图只是摆脱了它们。我认为内容大小是基于设置后的单元格属性,但事实并非如此。

-(CGSize)collectionViewContentSize
{
    if(self.extendedCell)
    {
        CGSize size = [super collectionViewContentSize];
        return CGSizeMake(size.width, size.height + 180);
    }
    else
    {
        return [super collectionViewContentSize];
    }
}
于 2013-02-17T22:45:12.077 回答
1

通过将大细胞分解成小细胞并将它们与视图连接来解决它。非常hacky,但iOS7希望能有所帮助。

于 2013-05-22T14:35:41.470 回答
0

检查任何返回的单元格大小是否具有边框大小等于 0 之一。

在我的情况下消失的原因是 sizeForItem 返回 {320,0}

为什么带有 UICollectionViewFlowLayout 的 UICollectionView 不显示单元格,而是询问大小?

为了从 nib 获得正确的尺寸视图(使用自动布局),我使用:

+ (CGSize)sizeForViewFromNib:(NSString *)nibName width:(CGFloat)width userData:(id)userData {
        UIView *view = viewFromNib(nibName, nil);
    [view configForUserData:userData];
    CGSize size = [view systemLayoutSizeFittingSize:CGSizeMake(width, SOME_MIN_SIZE) withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel];
    return CGSizeMake(width, size.height);
}
于 2015-04-08T03:31:33.273 回答