UILabel根据长度ios自动高度

时间:2015-06-19 06:35:10

标签: ios objective-c height uilabel

我有一个UICollectionView,如下所示。您可以看到 titleLabel 应根据内容改变其高度。背景视图 labelView 也应更改其高度。我怎么能这样做?

collectionview label

我用过......

-(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。还有其他方法吗?

2 个答案:

答案 0 :(得分:4)

这是方法

-(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;
}

答案 1 :(得分:1)

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

为单元格superView添加视图---> 设置前导,尾随和底部约束

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

现在,使用上面的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;

希望它有效。正是要正确设置自动布局。试试并告诉我。