如何将单元边界与superview的边界匹配?

时间:2015-09-07 04:53:10

标签: ios uicollectionview uicollectionviewcell

我有UICollectionViewControllerUICollectionViewCell

我希望从UICollectionViewCell的边界到UICollectionViewController的边界有一个前导和尾随空格,所以当方向改变时,我的单元格将调整为新的水平边界。

通常如何完成?

编辑:如果有帮助,我正在使用estimatedItemSize来计算UICollectionViewFlowLayout中的尺寸。

1 个答案:

答案 0 :(得分:0)

好的大部分都解决了。因为我正在使用iOS 8的自动细胞大小调整(如estimatedItemSize),所以我需要在我的单元格中实现preferredLayoutAttributesFittingAttributes。这是我的实施:

- (UICollectionViewLayoutAttributes * _Nonnull)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes * _Nonnull)layoutAttributes {
    UICollectionViewLayoutAttributes *attr = [layoutAttributes copy];
    CGRect newFrame = attr.frame;
    self.frame = newFrame;

    [self setNeedsLayout];
    [self layoutIfNeeded];

    CGFloat desiredHeight = [self.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    newFrame.size.height = desiredHeight;
    newFrame.size.width = _containerWidth - 20;
    attr.frame = newFrame;
    return attr;
}

其中_containerWidth是我单元格中的属性。我在我的collectionview中的_containerWidth中设置了我的单元格cellForItemAtIndexPath

虽然可能有一种更优雅的方法,但我只是在轮换期间在集合视图上调用reloadData

我暂时放弃了调整屏幕旋转大小的细节,因为它的错误,但这应该足以满足这个问题的目的。如果有人找到更好的解决方案,我会打开这个问题。