iPhone:文字宽度,以像素为单位

时间:2011-11-16 15:51:23

标签: iphone

我有UILabel(286,50)。当我用字体Helvetica 16设置一些文本时,标签在2行上划分文本。多亏了。现在我想以像素为单位获得此文本宽度。

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将在第二行移动最后一个单词...

很抱歉难以解释,如果我需要更清楚,请告诉我......

3 个答案:

答案 0 :(得分: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高度(因为它占用了两行)。

答案 1 :(得分: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与其文本混合使用?
我不确定这是你想要的,只是给出一些提示。

答案 2 :(得分:0)

尝试这样的事情:

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

labelSize获取受文本约束的标签大小

我不确定这是否是你需要的......