UICollectionView自动调整单元格会破坏UICollectionViewFlowLayout设置

时间:2014-09-26 12:10:57

标签: ios uicollectionview ios8

我目前正致力于自动调整iOS8中新增的细胞。

根据WWDC 2014视频“表和集合视图中的新功能”,自动调整单元格所需的全部内容是在estimatedSize上为UICollectionViewFlowLayout设置UICollectionView初始化,并覆盖sizeThatFits:。{/ p>中的UICollectionViewCell方法

初始化

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];

[flowLayout setEstimatedItemSize:CGSizeMake(146.0f, 156.0f)];

_collectionView = [[UICollectionView alloc] initWithFrame:[_containerView bounds] collectionViewLayout:flowLayout];
我的单元格中的

sizeThatFits方法,其中_userLabel是底部的标签,标记实际高度。

- (CGSize)sizeThatFits:(CGSize)size
{
    CGSize actualSize = CGSizeMake([[self contentView] bounds].size.width, [_userLabel frame].origin.x + [_userLabel bounds].size.height);

    return actualSize;
}

事实证明,实际尺寸的高度大于我估计的尺寸,这应该没问题,并且细胞实际上在高度上得到了适当的调整。

现在使用iPhone6和6+,宽度也可能不同。我希望细胞正确地跨越屏幕的宽度。因此我在UICollectionViewFlowLayout上实现了三个委托方法;我的第一个直觉是根据屏幕宽度,部分插图和项目间距来计算我希望单元格具有的宽度。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UIEdgeInsets sectionInsets = [self collectionView:collectionView layout:collectionViewLayout insetForSectionAtIndex:[indexPath section]];
    CGFloat interItemSpacing = [(UICollectionViewFlowLayout *) collectionViewLayout minimumInteritemSpacing];

    CGFloat cellWidth = ([_collectionView bounds].size.width - sectionInsets.left - sectionInsets.right - interItemSpacing) / 2;

    CGSize collectionViewCellSize = CGSizeMake(cellWidth, 156.0f);

    return collectionViewCellSize;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 12.0f;
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{   
    return UIEdgeInsetsMake(10.0f, 10.0f, 10.0f, 10.0f);
}

无论如何都有效。 collectionView不会尊重顶部插图,当滚动collectionView时,切换出另一个标签然后再返回,单元格似乎已经消失。

显然我做错了什么,但我似乎无法弄清楚在哪里。有人知道吗?

0 个答案:

没有答案