天天看点

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;
}
           

只要按照上面的方法就可以达到目的了。

动手试试就知道了。

继续阅读