2011年4月13日 星期三

[轉] 將字串以多行呈現於 UILabel 上

from : http://www.furnace.idv.tw/

我們都知道 UILabel 可以利用其 text 的特性來呈現 NSString 物件所包含的字串,一般在使用上我們都會先設定好 UILabel 的大小,並且設定 UILabel 所使用的字型以及字的大小,然後來呈現所需的字串。但是如何根據字串的長短做動態改變 UILabel 的大小呢?

可以利用 NSString 的方法 sizeWithFont:constrainedToSize:lineBreakMode: 做 UILabel 的高度計算,之後賦予 UILabel 可容納顯示字串的高度。以下示範如何動態變更 UILabel 的高度,以多行的方式呈現字串。
NSString *myString = @"Furnace Digital Blog 提供您學習 iOS 的相關資 訊,iOS 除了本身的 SDK 以外,Cocoa Touch 等其他 framework,都是可 以應用在 iOS 上的重要工具,活用這些工具才能讓您的 App 與眾不同。";  //設定完字串之後,判斷這個字串在特定的字型大小之下,需要多少大小的 UILabel 才能全部呈現整個字串 CGSize aSize = [myString sizeWithFont: [UIFont fontWithName:@"DFPMO-B5" size:19.0] constrainedToSize:CGSizeMake(250.0, 999.0) lineBreakMode:UILineBreakModeWordWrap]; 
 //宣告 UILabel ,將剛剛計算出來的 CGSize 變數,放入CGRect的宣告之中 UILabel *newLabel = [[UILabel alloc] initWithFrame: CGRectMake(35.0, 20.0, aSize.width, aSize.height)]; 
 //設定 Label 的字串顯示特性 newLabel.backgroundColor = [UIColor darkGrayColor]; newLabel.font = [UIFont fontWithName:@"DFPMO-B5" size:19.0]; newLabel.textColor = [UIColor yellowColor]; newLabel.lineBreakMode = UILineBreakModeWordWrap; newLabel.textAlignment = UITextAlignmentLeft; newLabel.text = myString; 
 //設定 numberOfLines 為零 newLabel.numberOfLines = 0;  [self.view addSubview:newLabel]; [newLabel release];
上述程式碼中,在設定需要的 CGSize 大小的時候,我們給定 constrainedToSize: 一個最大的呈現大小,因此設定寬度為 250, 而高度設定為 999,您也可以增加到 99999 也是沒有問題,因為這個方法會根據字型的設定來決定 CGSize 的大小。另一個重點是記得將 UILabel 的特性 numberOfLines 設為零,不然.....,各位可以自己試試看當 numberOfLines 不設定為零的時候會發生什麼事情?

透過以上方式,就可以動態變動 UILabel 的大小來呈現整個字串,就不會出現顯示範圍不夠,剩餘字數被卡掉的問題了。

1 則留言:

  1. 想問一下~直接將code往xocde裡面貼上!!執行後卻步能跳出任何東西!!
    怎麼半呢

    回覆刪除