2011-11-16 76 views
0

我有UILabel(286,50)。当我使用字体Helvetica 16设置一些文本时,标签将文本分为两行。那就是篦。现在我想要以像素为单位获取此文字宽度。iPhone:文本宽度像素

CGSize uiLabelSize = CGSizeMake(286, 50); 
return [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16] 
    constrainedToSize:uiLabelSize lineBreakMode:UILineBreakModeWordWrap].width; 

但看起来像这种方法不想将这个文本分成2行。它为我返回284像素。

任何想法如何?

return [text sizeWithFont:[UIFont 
    fontWithName:@"Helvetica" size:16]].width; 

此方法不适用于我。因为如果在第一行的最后一个单词太长,超过UILineBreakModeWordWrap将在第二行最后一个字移动...

对不起,我很难解释,让我知道如果我需要更清晰......

回答

2

替换50不受约束的高度:

CGSize textSize = [text sizeWithFont:font 
        constrainedToSize:CGSizeMake(286.0, FLT_MAX) 
         lineBreakMode:UILineBreakModeWordWrap]; 

编辑

NSString *text = @"what's wrong with your hair? it's like a science experiment back there. Don't rub more salt in the wound."; 
UIFont *font = [UIFont fontWithName:@"Helvetica" size:16]; 
CGSize textSize = [text sizeWithFont:font 
        constrainedToSize:CGSizeMake(286.0, FLT_MAX) 
         lineBreakMode:UILineBreakModeWordWrap]; 
NSLog(@"%f,%f", textSize.width,textSize.height); 

此输出272宽度(因为它是字前286个像素的包装)和60高度(因为它是两条线)。

+0

什么是FLT_MAX? – Jim

+0

这是最大浮点数。这就像说:根据需要使用尽可能多的线。 – Jano

+0

仍然像1行 – Jim

0
UILabel * testLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 286.0f, 50.0f)]; 
[testLabel setText:@"ab"]; 
NSLog(@"%f",[testLabel.text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16] constrainedToSize:CGSizeMake(286.0f, 50.0f) lineBreakMode:UILineBreakModeWordWrap].width); 

它看起来很有趣。所以我尝试了我的xcode,上面的代码适用于我。将文本设置为@"a"时,宽度将返回9,并且@"ab"返回18
您是否设置了文字?或者您可以将UILabel与其文本混合?
我不确定这是你想要的,只是给一些提示。

+0

顺便说一句,在'像素'应该叫'点',一般来说,它是我知道的公共像素面积的4倍(2 *宽度和2 *高度)。 – Kjuly

+0

尝试设置长文本 – Jim

+0

嗯,我知道这个问题。 – Kjuly

0

尝试一些llike这样的:

CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:label.frame.size lineBreakMode:label.lineBreakMode]; 

labelSize获取标签的通过短信

约束,我不知道这是否是你所需要的尺寸..

相关问题