網頁

2013年4月11日 星期四

iOS學習_UILabel配合字數調整高度(使用sizeWithFont)

有很多時候我們在呈現簡介,備註或說明等欄位時,會遇到文字過長UILabel無法一次顯示的狀況,最好的辦法莫過於從資料庫撈出的字數與想要顯示的字體大小來計算出UILabel應該有的寬高,而在iOS的字串內有一個很讚的方法:sizeWithFont。
CGSize stringSize = [datastring sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(canputwidth,CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];
說明:計算datastring在17字體大小下,擺在canputwidth的寬度中,並且以文字換行的方式計算CGSize。

獲得CGSize後即可由stringSize.width與stringSize.height取得需要的寬高,在利用setFrame來重新給定UILabel的高度。

程式碼:
-(void)someMethod:(NSString*)name { int fontsize = 17; CGSize labSize = [self calwordH:name canputwidth:self.view.bounds.size.width]; UILabel *fieldlb = [[UILabel alloc] init]; fieldlb.font = [UIFont systemFontOfSize:fontsize]; fieldlb.backgroundColor = color; fieldlb.text = name; [fieldlb setNumberOfLines:0]; fieldlb.lineBreakMode = NSLineBreakByWordWrapping; [fieldlb setFrame:CGRectMake(0.0f,0.0f,labSize.width,labSize.height)]; [self.view addSubview:fieldlb]; } -(CGSize) calwordH:(NSString *)string canputwidth:(int)canputwidth { CGSize s = [string sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(canputwidth,CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping]; return s; }

iOS6以後NSLineBreakByWordWrapping改為NSLineBreakByWordWrapping。