天天看點

iOS 自定義Cell 自适應高度

使用情景:比如自定義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;
}
           

隻要按照上面的方法就可以達到目的了。

動手試試就知道了。

繼續閱讀