2013-03-07 21 views
7

我有一個UILabel,我想設置它,使它有一個固定的寬度和可變的高度依賴於它的text而不是它的superViewNSLayoutConstraint爲UILabel「增長」多餘的線

即,如果text是「Hello World」。那麼標籤將...

------------------------ 
|Hello World.   | 
------------------------ 

如果text是「這是一些去了幾行很長的文本。」然後,標籤將...

------------------------ 
|This is some very long| 
|text that goes over | 
|several lines.  | 
------------------------ 

我已經使用NSLayoutConstraint已經設置固定的寬度。我將numberOfLines爲0,但它只是保留一個行高並連接以省略號的文本。

我知道有一種叫做「contentResistance」的東西,但我不確定這個名字或如何使用它。

這可能嗎?

回答

10

您需要將標籤的preferredMaxLayoutWidth設置爲固定寬度。我不知道爲什麼它不能爲自己弄清楚,因爲你已經限制了寬度,但是你去了。

如果有設置固定的大小在自動佈局世界的感覺錯了(它應該!),那麼你可以從標籤的寬度設置的值發生佈局後,在viewDidLayoutSubviews。在這種情況下,注意不要進入無效的佈局失效循環。

+1

此作品謝謝。感覺錯了,但有AUTO自動佈局,並給UILabel一個首選的寬度。我擁有的標籤的「固定」寬度取決於其superView的寬度。然而,preferredMaxLayoutWidth現在是一個常量。哦,在這種情況下,superView不會改變,所以它沒關係,哈哈。 – Fogmeister 2013-03-07 16:44:18

+1

我同意!對於更動態的佈局,您可以在viewDidLayoutSubviews中設置值,並將其設置爲超出邊界寬度。 – jrturton 2013-03-07 19:13:26

-2

嘗試這個代碼它可能有助於你>

[email protected]"haiiiiiiiii"; 

    UIFont *cellFont=[UIFont fontWithName:@"Helvetica" size:12.0]; 
    CGSize constraintSize=CGSizeMake(250,MAXFLOAT); 
    CGSize txtViewSize=[label.text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 

yourlabelname.numberOfLines = 0;

CGRect frame = yourlabelname.frame;

frame.size.width=250; 

frame.size.height=txtViewSize.height; 

yourlabelname.frame=frame; 

yourlabelname.text=cellText; 
+1

我使用AutoLayout,所以我不能直接更改框架。不過謝謝。 – Fogmeister 2013-03-07 16:40:28