2013-05-06 107 views
1

我與UILabel有這種奇特的行爲。任何numberOfLines都可以正常工作,除了1.如果將行數設置爲1,它將忽略稍後設置的寬度。 我不明白爲什麼1個螺絲起來......UILabel影響邊界大小的行數

這裏是我的代碼

UILabel *label = [[UILabel alloc] init]; 
label.backgroundColor = [UIColor greenColor]; 
label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill"; 
label.frame = CGRectMake(20, 20, 100, 0); 
CGRect rect = label.frame; 
label.numberOfLines = 2; 
label.lineBreakMode = NSLineBreakByTruncatingTail; 
[self.view addSubview:label]; 
rect.size.width = 100; 
label.frame = rect; 
[label sizeToFit]; 
+0

你想在這裏? – Balu 2013-05-06 13:40:43

+0

對不起,可能我不太清楚。我希望能夠更改行數,但保持標籤的固定寬度,而不管文本有多少。 – 2013-05-06 13:53:27

+0

請看我的答案吧。我的回答會正常工作.. – 2013-05-06 13:54:19

回答

4

使用此代碼:

UILabel *label = [[UILabel alloc] init]; 
label.backgroundColor = [UIColor greenColor]; 
label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill"; 
label.frame = CGRectMake(20, 20, 100, 0); 
label.numberOfLines = 3; 
label.lineBreakMode = NSLineBreakByTruncatingTail; 
[self.view addSubview:label]; 

[label sizeToFit]; 

CGRect rect = label.frame; 
rect.size.width = 100; 
label.frame = rect; 


隨着numberOfLines = 3

image1

隨着numberOfLines = 1

image2

+0

是的,我確實需要這個,但我也需要能夠將它設置爲其他數量的行,例如3 .. – 2013-05-06 13:57:32

+0

@AuRis現在看看它。 – 2013-05-06 14:04:24

+0

謝謝,這就是我的意思!出於某種原因,我以爲我試過了,它不起作用。我錯了。 – 2013-05-06 14:08:44

0

如果你想使用numberOfLines = 1在這種情況下,你的文本將是在一個請使用numberOfLines = 0;

label.numberOfLines = 0; 

而且沒有必要重新定義標籤框架,所以請刪除這些語句。

CGRect rect = label.frame; 
rect.size.width = 100; 
label.frame = rect; 

使用此代碼,這是完美的..

UILabel *label = [[UILabel alloc] init]; 
label.backgroundColor = [UIColor greenColor]; 
label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill"; 
label.frame = CGRectMake(20, 20, 100, 0); 
label.numberOfLines = 0; 
label.lineBreakMode = NSLineBreakByTruncatingTail; 
[self.view addSubview:label]; 

[label sizeToFit]; 
+0

謝謝,但我需要能夠設置爲所需的行數。您的建議只適用於整個文本。 – 2013-05-06 14:02:41

+0

根據你這個文本將是靜態的。? – 2013-05-06 14:04:11

-1

以此爲:

UILabel *label = [[UILabel alloc] init]; 
label.backgroundColor = [UIColor greenColor]; 
label.text = @"here is my label with lots of text to fill, here is my label with lots of text to fill"; 

label.numberOfLines = 0; 

CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(100 , 9999) lineBreakMode:label.lineBreakMode]; 
float lHeight = labelSize.height; 
label.frame = CGRectMake(20, 20, 100, lHeight); 

label.lineBreakMode = NSLineBreakByTruncatingTail; 
[self.view addSubview:label]; 

編輯:- (void)sizeToFit

說明:

調整大小並移動接收器視圖,使其僅包含其子視圖。 當您要調整當前視圖的大小時調用此方法,以便它使用最合適的空間量。特定的UIKit視圖根據自己的內部需求調整自己的大小。在某些情況下,如果一個視圖沒有超級視圖,它可能會將自己擴展到屏幕邊界。因此,如果您希望給定的視圖將其自身調整爲其父視圖,則應在調用此方法之前將其添加到父視圖中。

// [label sizeToFit]; 

希望它可以幫助你。

+0

這和我的代碼完全一樣。嘗試設置爲1行,你會明白我的意思。 – 2013-05-06 13:55:28

+0

雅吧。我看到了這個。我檢查這個問題,並讓你知道很快。 – 2013-05-06 14:01:01

+0

我得到了問題。您正在使用[label sizeToFit];那爲什麼它的大小是根據文本擴展的。所以刪除這一行。檢查我編輯的答案 – 2013-05-06 14:06:57

0

是的,當numberOfLines = 1

我必須在最後添加這一行,使之成爲所有案件工作..

label.width =分鐘(label.width它不工作,100 )