UICollectionViewFlowLayout和ios6

时间:2014-05-05 11:41:47

标签: ios objective-c uicollectionviewcell uicollectionviewlayout

我有一个扩展UICollectionFlowLayout。这通过将UIcollectionViewCell翻译为所需的数量并且还移动可见的集合视图矩形以显示转换的单元格来垂直居中attribute.frame

这在ios7中运行得非常好。但是在ios6中,可见的Rect of collection视图不会改变,因此第四个单元格被移动但被剪切。

例如:-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect rect =(0,0,320,500)并且我将单元格移动200,然后从(0,0,320,200)到(0,0,320,500)开始显示的单元格将被裁剪。当它在iOS7中完美运行时,在ios6中会发生这种情况的原因是什么?

@implementation VerticallyCenteredFlowLayout

    -(id)init
    {
        if (!(self = [super init])) return nil;
        [self setMinimumLineSpacing:5.0];
        [self setMinimumInteritemSpacing:0.0];
        [self setItemSize:CGSizeMake(10, 10)];
        [self setSectionInset:UIEdgeInsetsMake(0, 11, 11, 11)];
        [self setScrollDirection:UICollectionViewScrollDirectionVertical];
        return self;
    }

    -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect {
        NSArray* array = [super layoutAttributesForElementsInRect:rect];

        UICollectionViewLayoutAttributes* att = [array lastObject];
        if (att){
            CGFloat lastY = att.frame.origin.y + att.frame.size.height;
            CGFloat diff = self.collectionView.frame.size.height - lastY;
            if (diff > 0){
                for (UICollectionViewLayoutAttributes* a in array){
                    a.frame = CGRectMake(a.frame.origin.x, a.frame.origin.y + diff/2, a.frame.size.width, a.frame.size.height) ;
                }
            }
        }
        return array;
    }

1 个答案:

答案 0 :(得分:0)

在ios 6中没有自动调整contentSize。

VerticallyCenteredFlowLayout类中覆盖以下方法修复了问题

-(CGSize)collectionViewContentSize {
    CGSize size = [super collectionViewContentSize];
    if (size.height < MIN(_maxHeight,self.collectionView.frame.size.height)) {
        size.height = MIN(_maxHeight,self.collectionView.frame.size.height);
    }
    return size;
}