boundingRectWithSize给出带截断文本的高度

时间:2015-09-29 10:55:05

标签: ios uilabel

我使用以下方法来确定显示我所拥有的文本所需的高度。但是,如果不截断文本,我无法获得正确的高度。

CGRect labelRect = [comment boundingRectWithSize:headerMax
                                                 options:NSStringDrawingUsesLineFragmentOrigin |
                                                         NSStringDrawingUsesFontLeading
                                              attributes:@{NSFontAttributeName:font}
                                                 context:nil];

如何在不截断文本末尾的情况下不确定所需的标签高度。我希望整个文本适合标签。

4 个答案:

答案 0 :(得分:1)

-(CGRect)getLabelSizeWithText:(NSString *)textLabel forFontSize:(CGFloat) fontSize
{
CGRect textRect;

if (textLabel != nil)
{
    NSAttributedString *actualString = [[NSAttributedString alloc] initWithString:textLabel attributes:@{NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue" size:fontSize]} ];
    NSStringDrawingContext *targetContext = [[NSStringDrawingContext alloc] init];
    CGFloat commentLabelWidth = [[UIScreen mainScreen]bounds].size.width;
    textRect = [actualString boundingRectWithSize:CGSizeMake(commentLabelWidth, 900) options:NSStringDrawingUsesLineFragmentOrigin context:targetContext];
}

return textRect;
}

这个应该有效。试试吧

答案 1 :(得分:0)

使用 -

1. If you want word wrap -

 labelView.lineBreakMode = NSLineBreakByWordWrapping; 
 labelView.numberOfLines = 2;

CGRect labelRect = [comment boundingRectWithSize:headerMax
                                  options:NSStringDrawingUsesLineFragmentOrigin |
                                                     NSStringDrawingUsesFontLeading | NSLineBreakByWordWrapping
                                          attributes:@{NSFontAttributeName:font}
                                             context:nil];


2. If you Don't want truncating tail at all -


  // No line break mode
  labelView.numberOfLines = 0;

CGRect labelRect = [comment boundingRectWithSize:headerMax
                                  options:NSStringDrawingUsesLineFragmentOrigin |
                                                     NSStringDrawingUsesFontLeading
                                          attributes:@{NSFontAttributeName:font}
                                             context:nil];

答案 2 :(得分:0)

试试这个

NSString *cellText = restaurant.review;
UIFont *cellFont = [UIFont systemFontOfSize:14.0];
NSDictionary *attributes = @{NSFontAttributeName: cellFont};
CGRect labelSize = [cellText boundingRectWithSize:CGSizeMake([UIScreen mainScreen].bounds.size.width-20, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];

答案 3 :(得分:-1)

我不确定我是否理解你的问题;听起来您正在尝试计算显示文本所需的frame大小,并手动设置frame。此外,通过设置.numberOfLines = 2,您可以限制可以显示的文本。我的建议是通过autolayout设置约束,可选择添加.minimumScaleFactor并让它自动调整大小。

如果您仍想计算尺寸,并考虑numberOfLines,则可以使用原型标签并使用其高度

- (CGSize)preferredSizeForString:(NSString *)string 
                           width:(CGFloat)width
{
    UILabel *prototypelabel = [UILabel new];
    prototypelabel.frame = CGRectMake(0, 0,  width, 0);
    prototypelabel.text = @"Your string";
    prototypelabel.numberOfLines = 2;
    [prototypelabel sizeToFit];

    return prototypelabel.frame.size;
}