en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

4.08.2011

將字串以多行呈現於 UILabel 上


我們都知道 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 的大小來呈現整個字串,就不會出現顯示範圍不夠,剩餘字數被卡掉的問題了。






沒有留言:

張貼留言