2011-11-16 141 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獲取標籤的通過短信

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

相關問題