设置CollectionView的单元格高度,并不真正扩展单元格以进行滚动

时间:2015-05-22 20:04:17

标签: ios autolayout

我可以设置单元格的高度并显示内容,但是我无法向下滚动集合视图,如果我的数组中有2个项目,则UITextView内容(在该自定义单元格中)与重新开始收集视图中的第二个单元格:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    CustomCellView* cell = [collectionView dequeueReusableCellWithReuseIdentifier:DequeueReusableCell forIndexPath:indexPath];
    [cell setHeight: [cell calculateHeight]];
    [cell layoutIfNeeded];
    return cell;
}

1 个答案:

答案 0 :(得分:0)

您无法手动设置单元格大小。您需要让collectionView为您设置单元格。

假设您正在使用Flow布局,如果您想要一个常量项目大小,您只需在布局,IB或代码中设置itemSize属性。如果你需要动态尺寸,你需要实现这个:

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

在回答有关如何计算尺寸的问题时,我会做这样的事情:

+ (CGFloat)heightForCellWithText:(NSString *)text width:(CGFloat)width
{
    UIFont *textViewFont = [UIFont systemFontOfSize:16];
    NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName : textViewFont}];
    CGRect rect = [attributedText boundingRectWithSize:CGSizeMake(width, FLT_MAX) options:NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin context:nil];
    return rect.size.height;
}