我有一个UICollectionView,如下所示。 titleLabel 如您所见应根据内容改变其高度.background视图 labelView 也应更改其高度,我该怎么做?

我用了...

-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{

    CGSize constraint = CGSizeMake(textWidth, 20000.0f);
    CGRect rect = [text boundingRectWithSize:constraint
                       options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                    attributes:@{NSFontAttributeName:cell.titleLabel.font}
                       context:nil];
    CGFloat height = rect.size.height;

    height = ceilf(height);
//    NSLog(@"height %f", height);
    return height;
}

我像这样使用...
CGRect newFrame = cell.titleLabel.frame;
      newFrame.size.height = height;
       cell.titleLabel.frame = newFrame;

我正在将新框架贴到标签上,但是高度从固定的y向下增加。现在我必须根据高度将y抬起,还有其他方法吗?

最佳答案

使用ankit的代码获取标签所需的高度,并使用autoLayout,如下所示。

添加一个视图---> ,设置相对于单元格SuperView的前导,尾部约束和底部约束

然后将标签作为子视图添加到此视图。添加所有四个约束。即设置前导,尾随,顶部和底部约束

现在,使用上面的Ankit代码(我在下面粘贴)获取标签的高度并将其设置为标签框架。

-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{

    CGSize constraint = CGSizeMake(textWidth, 20000.0f);
    CGRect rect = [text boundingRectWithSize:constraint
                       options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                    attributes:@{NSFontAttributeName:cell.titleLabel.font}
                       context:nil];
    CGFloat height = rect.size.height;

    height = ceilf(height);
//    NSLog(@"height %f", height);
    return height;
}

现在将新框架设置为标签。
CGRect newFrame = cell.titleLabel.frame;
      newFrame.size.height = height;
       cell.titleLabel.frame = newFrame;

希望它能工作。 就是正确设置autolayout 。尝试一下,让我知道。

10-07 19:32
查看更多