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