IOS 实现动态分配tablecell高度
2014-01-01 12:14
197 查看
也许你会遇到这样一个问题,或者需要这么一个功能。
表中每个单元格的高度随着该单元格的内容多少而变化。尤其内容不止是文字的时候
其实要实现这个功能很简单。
首先所谓的动态分配单元格高度只是效果上看起来是这样,其实还是跟我们平常设置
单元格高度一样,每行先分配高度。
这里就一个demo来说说吧
要实现这个功能其实最重要的就是下面的两个方法
1、//设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *text = .......;
//这里的text具体内容就是你要在单元格上显示的内容
CGSize constraint = CGSizeMake(300, 2000.f);
//先设置一个约束,这个是为了在宽度一定的时候计算text内容所占视图的大小
//高度尽量设的大一下,因为你不确定text具体内容有多少
CGSize size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
//这里利用NSString的一个方法来计算text所占大小,
//感谢NSString为我们封装了这个方法,使得这个功能得以实现
CGFloat height = MAX(size.height,40.0f);
//这里是为了给单元格高度设置一个最低限度
return height;
}
2、//配置每个单元
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UILabel *textLabel = nil;
//先创建一个用于显示文字的label,当然也可以用其他的,
static NSString *cellIndentifier = @"indentifier";
//为单元格创建一个专属标签
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
//先搜索缓冲区看有没有专属标签的cell
if (cell == nil) {
//如果没有那么就创建一个
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
//把标签初始化
textLabel = [[UILabel alloc]initWithFrame:CGRectZero];
textLabel.font = [UIFont systemFontOfSize:14];
textLabel.tag = 1;
//这里设置tag值以便以后调用
//将label添加到cell
[[cell contentView]addSubview:textLabel];
}
NSString *text = ......;
//同上面的
CGSize constraint = CGSizeMake(300, 2000.f);
CGSize size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
if (!textLabel) {
textLabel = (UILabel *)[cell viewWithTag:1];
}
//如果label是空的那就通过tag值调用
textLabel.text = text;
textLabel.frame = CGRectMake(10, 10, 300, size.height);
//通过text内容所占size的设置label所显示在的区域
return cell;
}
功能核心也就是以上两个方法,是不是很简单?当然这只是纯文字,要是还混合有图片呢?
其实原理是一样的,UIImage 也有个属性 size ,说了这个你应该就知道该怎么办了吧?
好了就到这里,后面附上我做的一个关于图片的demo,若是还不懂可以跟我讨论一下。
这是这个demo的截图,可以看一下效果
![](https://img-blog.csdn.net/20140101120936453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGNfb2Jq/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个demo的链接:http://download.csdn.net/detail/u012884714/6795293
自己遇到了这个问题,然后查资料实现了这个功能,在这里跟大家分享了 —— LC
表中每个单元格的高度随着该单元格的内容多少而变化。尤其内容不止是文字的时候
其实要实现这个功能很简单。
首先所谓的动态分配单元格高度只是效果上看起来是这样,其实还是跟我们平常设置
单元格高度一样,每行先分配高度。
这里就一个demo来说说吧
要实现这个功能其实最重要的就是下面的两个方法
1、//设置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *text = .......;
//这里的text具体内容就是你要在单元格上显示的内容
CGSize constraint = CGSizeMake(300, 2000.f);
//先设置一个约束,这个是为了在宽度一定的时候计算text内容所占视图的大小
//高度尽量设的大一下,因为你不确定text具体内容有多少
CGSize size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
//这里利用NSString的一个方法来计算text所占大小,
//感谢NSString为我们封装了这个方法,使得这个功能得以实现
CGFloat height = MAX(size.height,40.0f);
//这里是为了给单元格高度设置一个最低限度
return height;
}
2、//配置每个单元
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UILabel *textLabel = nil;
//先创建一个用于显示文字的label,当然也可以用其他的,
static NSString *cellIndentifier = @"indentifier";
//为单元格创建一个专属标签
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
//先搜索缓冲区看有没有专属标签的cell
if (cell == nil) {
//如果没有那么就创建一个
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
//把标签初始化
textLabel = [[UILabel alloc]initWithFrame:CGRectZero];
textLabel.font = [UIFont systemFontOfSize:14];
textLabel.tag = 1;
//这里设置tag值以便以后调用
//将label添加到cell
[[cell contentView]addSubview:textLabel];
}
NSString *text = ......;
//同上面的
CGSize constraint = CGSizeMake(300, 2000.f);
CGSize size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
if (!textLabel) {
textLabel = (UILabel *)[cell viewWithTag:1];
}
//如果label是空的那就通过tag值调用
textLabel.text = text;
textLabel.frame = CGRectMake(10, 10, 300, size.height);
//通过text内容所占size的设置label所显示在的区域
return cell;
}
功能核心也就是以上两个方法,是不是很简单?当然这只是纯文字,要是还混合有图片呢?
其实原理是一样的,UIImage 也有个属性 size ,说了这个你应该就知道该怎么办了吧?
好了就到这里,后面附上我做的一个关于图片的demo,若是还不懂可以跟我讨论一下。
这是这个demo的截图,可以看一下效果
这个demo的链接:http://download.csdn.net/detail/u012884714/6795293
自己遇到了这个问题,然后查资料实现了这个功能,在这里跟大家分享了 —— LC
相关文章推荐
- ios 实现 cell 的动态高度
- IOS 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
- ios动态调整UITableViewCell高度的实现方法
- 【iOS开发】iOS动态性可复用而且高度解耦的用户统计埋点实现
- iOS开发>学无止境 - AutoLayout 实现固定宽度动态高度的 ScrollView
- ios实现动态加载cell高度
- iOS开发-Storyboard实现cell的动态高度
- ios TableView那些事(三十 五)TableView 单选操作使用Autolayout实现UITableView的Cell动态布局和高度动态改变
- iOS UITableView+FDTemplateLayoutCell 配合AutoLayout分分钟教你实现动态高度自适应
- iOS动态获取键盘高度实现流畅的键盘输入框开发
- ios TableView那些事(三十 五)TableView 单选操作使用Autolayout实现UITableView的Cell动态布局和高度动态改变
- iOS 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
- IOS表视图动态高度实现实例
- iOS UITableView Cell的动态高度实现
- 使用Autolayout xib实现动态高度的TableViewCell
- iOS开发之UITableview之多种Cell高度自适应实现方案的UI流畅度分析
- 1. 线性表(用可动态分配的一维数组实现)
- iOS中实现动态区域裁剪图片功能实例
- iOS中如何动态获取label的宽度和高度
- 内存管理内幕--动态分配的选择、折衷和实现(一)