IOS 控件 - UITableView 中的cell 自适应高度

当 UITableView 中有一个 label 的内容比较长的时候,就需要 cell 自适应高度来多行展示label;

首先设置 label 的 line 为0;

代码如下:

// 为每一个 cell 预设置一个高度,可以提高效率
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 44;
}

// 这里每一个 cell 的实际高度(即自适应高度)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    // 这里可以通过 if 判断语句来为你需要的那一行单独设置自适应高度
    if (indexPath.row == [rowsArr count] - 1) {

        // 通过数据来获取 label 所需要的高度
        NSString *rowName = [rowsArr objectAtIndex:indexPath.row];
        NSString *key = [rowsAndKeyDic objectForKey:rowName];
        CGFloat descriptionH = [self textHeight:[taskDetailDic objectForKey:key]];

        return descriptionH + 20;// 这个70 完全是根据你的情况调整的
    }
    return 44;
}

// 获取 label 实际所需要的高度
- (CGFloat)textHeight:(NSString *)labelText {
    UIFont *tfont = [UIFont systemFontOfSize:16.0];
    NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:tfont,NSFontAttributeName,nil];
    //  ios7 的API,判断 labelText 这个字符串需要的高度;    这里的宽度(self.view.frame.size.width - 140he)按照需要自己换就 OK
    CGSize sizeText = [labelText boundingRectWithSize:CGSizeMake(self.view.frame.size.width - 140, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;
    return sizeText.height;
}
时间: 2024-10-10 13:56:58

IOS 控件 - UITableView 中的cell 自适应高度的相关文章

IOS 控件 - UITableView 的重用机制

转载来自:http://blog.csdn.net/joiningss/article/details/6702023 一. UITableView 的重用机制: iphone重用机制是苹果为了实现大量数据显示而采用的一种节省内存的机制,比如在UITableView和ScrollView 等地方.为什么要“可重用”???对于我们的项目来说,内存控制是必不可少的,如果一个tableview有几百个cell,这个内存消耗是很大的,而且有些cell里面都有image之类的很占内存的资源存在的话,那这样

IOS控件UITableView详解

首选创建一个新的项目,并添加一个MainViewController的Class文件 打开MainViewController.h文件 [cpp] view plaincopy @interface MainViewController : UIViewController<UITableViewDataSource,UITableViewDelegate> @property (nonatomic, retain) NSArray *dataList; @property (nonatomi

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi

第?一讲:UITableView 高级 自定义cell , cell自适应高度

一.自定义cell(包括cell的自定义,以及直接赋值的方法) 自定义cell就是创建一个UITableViewCell的子类. 把cell上的控件创建都封装在子类中,简化UIViewController中的代码 示例代码分析:(这个例子包括cell的自定义,以及直接赋值的方法) 1.需要建立tabelViewCell类, 在其中进行cell上控件的添加 2.在tabelViewCell.m中进行初始化,和layoutSubviews的frame布局的操作 tabelViewCell.h定义属性

设计一个 iOS 控件

代码的等级:可编译.可运行.可测试.可读.可维护.可复用 前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各种环境,但是接口越少对外产生的依赖就越少,维护起来也更容易.通常一些前期看起来

iOS控件之UIResponder类

iOS控件之UIResponder类 在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,我们知道UIApplication.UIView.UIViewController这几个类是直接继承自UIResponder,UIWindow是直接继承自UIView的一个特殊的View,所以这些类都可以响应事件.当然我们自定义的继承自UIView的View以及自定义的继承自UIViewController的控制器都可以响应事件.iOS里面通常将这些能响应事件的对象称之为响应者. iO

从零开始学ios开发(六):IOS控件(3),Segmented Control、Switch

这次的学习还是基于上一个项目继续进行(你也可以新建一个项目)学习Segmented Control和Switch. Segmented Control Switch Segmented Control和Switch的主要区别在于Segmented Control可以有多个值进行选择,而Switch只有2个值. 1)添加Segmented Control从object library中拖一个Segmented Control到iphone界面上然后调整Segmented Control位置以及它的

【ExtAspNet学习笔记】ExtAspNet控件库中常见问题

1.在Grid控件中添加CheckBoxField控件,选择一行时,如何获取选择的CheckBoxField所对应记录的唯一标识值? ●解决方案: 在前台Grid控件中, 添加“<ext:CheckBoxField ColumnId="myCheckBoxField" Width="60px" RenderAsStaticField="false"  DataField="MyCheckBox" CommandName=

转--动态改变UITableView中的Cell高度

往往在开发iPhone的应用过程中用得最多的应该算是UITableVIew了,凭着IOS给UITableView赋予了这种灵活的框架结构,让它不管在显示列表方面还是在排版方面都有着一定的优势.虽然UITableView功能强大,但是对于一些复杂的应用需求在开发的过程中会出现一些问题,如动态改变UITableView显示的Cell高度就是其中之一 其实想要改变UITableView的Cell高度并不难,UITableView带有一个rowHeight属性,使用他就可以改变高度了.但是这样的改变是把