如何从NSString计算文本矩形的高度?

时间:2010-04-23 11:32:22

标签: iphone objective-c cocoa-touch nsstring

我知道有这个:

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:

但由于CGSize总是具有相同的高度,并且不能适应任何缩小的文本或任何缩小的文本,因此CGSize并没有说明文本的高度。

示例:制作一个320 x 55点的UILabel并在其中放入一个loooooooooooooong文本。让标签缩小文本。惊喜:CGSize.height保持相同的高度,即使文字很小,你需要一台显微镜。

好的,所以在我的脑袋撞到我的macbook pro后现在已经被破坏了一半,唯一可以帮助的想法是讨厌的realFontSize。但字体大小是异食癖,我想,它不是你在屏幕上得到的,不是吗?

当字体大小为10时,我的文字最多是10分吗?偶尔我尝试了一下,一旦文本有一个或一些延伸到下面的字符(就像y的尾部那样),它就会超出界限,整个文本大于10点。 / p>

那么如何在不留长胡须和一些医院经验的情况下计算单线uilabel的实际文字高度?

5 个答案:

答案 0 :(得分:3)

试试这段代码:

CGSize maximumSize = CGSizeMake(300, 9999);
NSString *myString = @"This is a long string which wraps";
UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize myStringSize = [myString sizeWithFont:myFont 
    constrainedToSize:maximumSize 
    lineBreakMode:self.myLabel.lineBreakMode];

来自我的回答here

它使用不同的方法,并在开始时设置一个非常高的CGSize(然后缩小以适应字符串)

答案 1 :(得分:3)

重要提示:自iOS 7.0起,不推荐使用以下方法。

  

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:

使用以下代码

CGRect frame = [cellText boundingRectWithSize:CGSizeMake(568,320) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:32.0f]} context:nil];
float height = frame.size.height;

答案 2 :(得分:2)

听起来像从该函数调用中获得实际字体大小后,您需要再次使用该新大小调用:

NSString* yourString = @"SomeString";
float actualSize;
[yourString sizeWithFont:yourFont 
             minFontSize:minSize 
          actualFontSize:&actualSize 
                forWidth:rectWidth 
           lineBreakMode:breakMode];

CGSize size = [yourString sizeWithFont:[UIFont fontWithName:fontName size:actualSize]];

答案 3 :(得分:1)

您还设置了label.numberOfLines = 0;

答案 4 :(得分:0)

运行此代码后,frame.size将完全具有nsstring的高度和宽度。

NSString *text = @"This is my Mac";
textFont = [NSFont fontWithName:@"HelveticaNeue-Medium" size: 80.f];
textColor = [NSColor yellowColor];
NSDictionary *attribs = @{ NSForegroundColorAttributeName:textColor,
                           NSFontAttributeName: textFont };
CGRect frame = [text boundingRectWithSize:CGSizeMake(0,0) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesDeviceMetrics attributes:attribs context:nil];