使用情景:比如自定義Cell中有一個Label,Label要顯示的內容不確定,故Cell的高度需要根據Label要顯示內容的多少來動態地調整。
有碼有真相:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil] lastObject];
}
cell.customLabel.font = [UIFont systemFontOfSize:13];
cell.customLabel.text = @"2013年8月20日,北京航空航天大學軟件學院與軟通動力達成戰略性合作協議,聯合培養軟件工程碩士,開創軟件工程專業建設、人才培養和高端學位教育合作的創新模式,共同致力於培養國際化、現代化、工程型、複合型軟件人才。軟通動力作爲一個根植於中國的公司,我們能爲客戶最大限度的提供優質人才資源,不斷整合優化以適應客戶的發展需要。爲了給員工提供更好的平臺,“北航-軟通動力軟件工程碩士班”報名工作已盛大啓幕,歡迎公司內有志於攻讀碩士學位的員工積極諮詢,報名。一、 專業介紹爲積極落實工業和信息化部《工業產品質量發展“十二五”規劃》、《軟件和信息技術服務業“十二五”發展規劃》,針對目前國內質量管理與軟件測試人才的缺乏,北京航空航天大學軟件學院聯合軟通動力共同培養軟件質量管理與測試專業軟件工程碩士,爲業界培育一批具備不同專業背景、有市場觀念的開發管理、工程管理及軟件經營等複合型軟件人才,形成一批有相當規模和質量、從事質量管理與軟件測試的專業技術人員。";
//設置自定義Label的行數是多行顯示
cell.customLabel.numberOfLines = 0;
//計算出顯示完整內容需要的最小尺寸
CGSize requiredSize = [cell.customLabel.text sizeWithFont:[UIFont systemFontOfSize:13] constrainedToSize:CGSizeMake(320, 10000) lineBreakMode:NSLineBreakByWordWrapping];
//重新設置自定義Label的frame,很關鍵
cell.customLabel.frame = CGRectMake(0, 0, requiredSize.width, requiredSize.height);
CGRect rect = cell.frame;
rect.size.height = requiredSize.height;
//設置cell的高度
cell.frame = rect;
return cell;
}
//
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//特別說明:使用self 調用後面的方法 和 直接使用 [tableView cellForRowAtIndexPath:indexPa th]調用是不一樣的結果的.
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
return cell.frame.size.height;
}
只要按照上面的方法就可以達到目的了。
動手試試就知道了。