iOS开发-Storyboard实现cell的动态高度
2015-07-23 00:46
471 查看
今天用Storyboard实现动态的cell高度,遇到了点麻烦,查了很多博客,最终实现了想要的效果,下面把方法介绍出来,我近可能的写的详细些。
1、先创建一个cell的xib,并且绑定。
2、在xib中拖入一个lable
其中label的约束是上左右分别是10,下是>=30,
3、然后创建一个TableViewController
4、我们想要我们的UITableView使用xib中自定义的Cell,那么我们需要向UITableView进行注册
准备工作都做完了,但是我们运行起来会发现,所有的cell都高度都是一样的,是我们想要的效果。
从self.tableData中的数据我们可以看到,每一个Cell显示的数据高度是不一样的,那么我们需要动态计算Cell的高度。由于
是auto layout,所以我们需要用到一个新的API systemLayoutSizeFittingSize:来计算UITableViewCell所占空间高度。Cell的高
度是在- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath这个
UITableViewDelegate的方法里面传给UITableView的。
在做这些之前,我觉得最容易忽视的一步就是,xib中cell上的label我们必须要勾选一个选项
之前我没有实现效果就是因为这个选项没有勾选,所以没有出来我想要的效果。
这里有一个需要特别注意的问题,也是效率问题。UITableView是一次性计算完所有Cell的高度,如果有1W个Cell,那么-
(CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath就会触发1W次,然后才显
示内容。不过在iOS7以后,提供了一个新方法可以避免这1W次调用,它就是- (CGFloat)tableView:(UITableView )tableView
estimatedHeightForRowAtIndexPath:(NSIndexPath )indexPath。要求返回一个Cell的估计值,实现了这个方法,那只有显示
的Cell才会触发计算高度的protocol. 由于systemLayoutSizeFittingSize需要cell的一个实例才能计算,所以这儿用一个成员变量
存一个Cell的实列,这样就不需要每次计算Cell高度的时候去动态生成一个Cell实例,这样即方便也高效也少用内存,可谓一举
三得。
我们声明一个存计算Cell高度的实例变量:
还有不懂得朋友要去这篇博客去看,带有源码,我的就不给大家了,太差
感谢------>>>http://www.cocoachina.com/industry/20140604/8668.html
1、先创建一个cell的xib,并且绑定。
2、在xib中拖入一个lable
其中label的约束是上左右分别是10,下是>=30,
3、然后创建一个TableViewController
4、我们想要我们的UITableView使用xib中自定义的Cell,那么我们需要向UITableView进行注册
UINib *movieCellNib = [UINib nibWithNibName:@"MovieCell" bundle:nil]; [self.videoTableView registerNib:movieCellNib forCellReuseIdentifier:@"movieCell"];然后实现tableView的代理方法。
准备工作都做完了,但是我们运行起来会发现,所有的cell都高度都是一样的,是我们想要的效果。
从self.tableData中的数据我们可以看到,每一个Cell显示的数据高度是不一样的,那么我们需要动态计算Cell的高度。由于
是auto layout,所以我们需要用到一个新的API systemLayoutSizeFittingSize:来计算UITableViewCell所占空间高度。Cell的高
度是在- (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath这个
UITableViewDelegate的方法里面传给UITableView的。
在做这些之前,我觉得最容易忽视的一步就是,xib中cell上的label我们必须要勾选一个选项
之前我没有实现效果就是因为这个选项没有勾选,所以没有出来我想要的效果。
这里有一个需要特别注意的问题,也是效率问题。UITableView是一次性计算完所有Cell的高度,如果有1W个Cell,那么-
(CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexPath )indexPath就会触发1W次,然后才显
示内容。不过在iOS7以后,提供了一个新方法可以避免这1W次调用,它就是- (CGFloat)tableView:(UITableView )tableView
estimatedHeightForRowAtIndexPath:(NSIndexPath )indexPath。要求返回一个Cell的估计值,实现了这个方法,那只有显示
的Cell才会触发计算高度的protocol. 由于systemLayoutSizeFittingSize需要cell的一个实例才能计算,所以这儿用一个成员变量
存一个Cell的实列,这样就不需要每次计算Cell高度的时候去动态生成一个Cell实例,这样即方便也高效也少用内存,可谓一举
三得。
我们声明一个存计算Cell高度的实例变量:
@property (nonatomic, strong) UITableViewCell *movieCell;然后初始化它:
self.movieCell = [self.videoTableView dequeueReusableCellWithIdentifier:@"movieCell"];下面是计算Cell高度的实现:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { Movie *cell = self.movieCell; cell.tLabel.text = [self.tableData objectAtIndex:indexPath.row]; CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; NSLog(@"h=%f", size.height + 1); return 1 + size.height; }
还有不懂得朋友要去这篇博客去看,带有源码,我的就不给大家了,太差
感谢------>>>http://www.cocoachina.com/industry/20140604/8668.html
相关文章推荐
- iOS数组和字符串的转化
- [iOS学习]怎么用返回键设置自定义的图片
- iOS 注释的5要3不要和编码规范的26个方面
- 为拿高薪——作为会计妹子任性转岗IOS
- iOS Sprite Kit教程之xcode安装以及苹果帐号绑定
- iOS Sprite Kit教程之编写程序以及Xcode的介绍
- 应用程序挂起、复原与终止— IOS开发
- c#、android和ios下aes的加解密
- iOS开发中可能有用的那些分类们Categories
- 我在iOS开发工程师的路上正在学习
- ios7关于图片资源使用需要注意的问题
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <五> NSDicionary + NSMutableDictionary
- wxhl ios bj 49 张浩 学习心得连载 第二章
- ios7,ios8中关于xcassets资源使用的问题
- IOS学习之蓝牙4.0
- iOS之沙盒机制和如何获取沙盒路径
- 对iOS开发中内存管理的一点总结与理解
- [教程技巧] iOS开发学习路线图
- iOS本地国际化处理自己封装好的宏
- ios结构体