具有自动布局的UICollectionViewCell动态高度

时间:2014-07-29 07:10:05

标签: uicollectionview autolayout uicollectionviewcell nslayoutconstraint

我正在使用UICollectionViewCell的自动布局。因此,我们的想法是允许CollectionViewCell根据布局确定它的大小。所有约束都设置正确,但问题是我无法计算数据源方法的大小

collectionView:layout:sizeForItemAtIndexPath:

理想情况下,我想计算Cell的高度,并执行以下操作:

static MyCell *myCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    myCell = [[MyCell alloc] initWithFrame:CGRectZero];
});
cell.model = model;
[cell updateConstraints];
[cell layoutSubviews];
return cell.frame.size;

但它不会强制更新约束,因此单元格的帧为零。你能建议我如何根据它的约束来计算单元格的大小?

由于

3 个答案:

答案 0 :(得分:8)

这是解决方案

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    YourCollectionCell * cell = (YourCollectionCell *) [YourCollectionViewObj cellForItemAtIndexPath:indexPath];

            if (cell == nil) {

                NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"YourCollectionCell" owner:self options:nil];
                cell = [topLevelObjects objectAtIndex:0];
                cell.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 20);
                // SET YOUR CONTENT
                [cell layoutIfNeeded];

            }

            CGSize CellSize = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize withHorizontalFittingPriority:UILayoutPriorityDefaultHigh verticalFittingPriority:UILayoutPriorityDefaultLow];


            return CellSize;
 }

答案 1 :(得分:0)

我认为你应该返回这个尺寸:

return [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

答案 2 :(得分:0)

对于UIcollectionViewcontroller中UICollectionViewCell的动态高度,您需要实现以下方法: -

(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath