有没有人知道在这里工作或我目前做错了什么。
CGSize boundingSize = CGSizeMake(288, 9999);
CGRect boundingRect = [text boundingRectWithSize:boundingSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:[NSDictionary dictionaryWithObjectsAndKeys:theFont, NSFontAttributeName, nil]
context:nil];
当代码在iOS7上运行时(手机和SIM卡上),返回的大小为416.3宽,高度为15.5。很明显,只是忽略了boundingRectWithSize。有没有其他人遇到这个,如果有的话,有人知道如何解决它或有人指出我在哪里我错了。
答案 0 :(得分:3)
您可以使用此方法计算绘制所需的空间 串。您在size参数中指定的约束是指南 对于渲染器如何调整字符串的大小。但是,实际 此方法返回的边界矩形可以大于 约束是否需要额外的空间来呈现整个字符串。 通常,渲染器会保留宽度约束并调整 根据需要进行高度约束。
如果您指定固定字体且空间太小,则必须提供一些内容。在这种情况下,它是边界空间。我猜你期待换行。 288的宽度是否允许任何合理的包裹?
答案 1 :(得分:1)
我知道这是一个老问题,但我找到了解决问题的方法。下面是代码示例
1)首先创建一个最小高度的宏
#define MIN_HEIGHT 10.0f
2)之后使用下面的代码根据您指定的文本给出可变高度。但为此,您需要指定UILabel的框架或用于显示文本的任何内容。
// Initialize UILabel with initial frame.
UILabel *lblMakeModel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 180, 50)];
// Set numberOfLines as zero
lblMakeModel.numberOfLines = 0;
// Set text here
lblMakeModel.text = @"sdbsbdjhsbdhjsbdhjasd bhbdhjasbdsahjdbahjsdbjhsd bdhjsabdhjsbdhsbdhsad dhbsadbasdhbsajhdbsadyogi";
// create a constraint for fixed width and maximum 20000 height.
CGSize constraint = CGSizeMake(lblMakeModel.frame.size.width, 20000.0f);
// Get the CGRect with the given constraint for the text of UILabel
CGRect textRect = [lblMakeModel.text boundingRectWithSize:constraint
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:lblMakeModel.font}
context:nil];
// Set LineBreakMode for UIlabel
[lblMakeModel setLineBreakMode:NSLineBreakByWordWrapping];
[lblMakeModel setAdjustsFontSizeToFitWidth:NO];
// Again set the frame from the height you get from CGRect object.
[lblMakeModel setFrame:CGRectMake(lblMakeModel.frame.origin.x, lblMakeModel.frame.origin.y, lblMakeModel.frame.size.width, MAX(textRect.size.height, MIN_HEIGHT))];
答案 2 :(得分:0)
方法中仍存在一个真正的错误" boundingRectWithSize",有时它给出的错误宽度大于有限的宽度,我通过这个工作解决了它并在方法后得到标签高度&# 34; sizeToFit"
UILabel *textLabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 0,maxTextWidth, CGFLOAT_MAX)];
[textLabel setNumberOfLines:0];
[textLabel setFont:Font];
[textLabel setLineBreakMode:NSLineBreakByWordWrapping];
[textLabel setText:@"Text bla bla bla"];
[textLabel sizeToFit];
float height = textLabel.frame.size.height;