我有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将在第二行移动最后一个单词...
很抱歉难以解释,如果我需要更清楚,请告诉我......
答案 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获取受文本约束的标签大小
我不确定这是否是你需要的......