UITableView中动态返回自定义cell的高度
2015-11-03 21:18
441 查看
环境:系统版本:OSX 10.10.2
Xcodel版本:6.3.2
模拟器:iPhone6
其他:使用MRC
功能:动态返回cell高度
动态返回cell高度
使用场景:当cell上的某一个控件(通常是lable),需要根据字符串的长度来决定自身的高度,此时就需要动态返回cell高度,cell的高度最终是cell上各控件的间距以及各控件自身的高度
第一步:在自定义cell类里,赋值model的方法里面,根据model的某一给定值,来决定这个label自身的高度,通过boundingRectWithSize方法,这个方法里,宽度一定要和label的宽度保持一致,字体大小一定要和label的字体大小保持一致,最终我们所得到的bounds.size.height就是我们根据字符串的长度,返回出来的高度
第二步:需要在自定义cell类里面,添加一个类方法,专门提供给controller
返回行高的方法里调用,用于返回行高的方法要比返回cell的方法先执行,所以我们同样也需要在返回行高的方法里得到model,并最终传入到自动以cell里的类方法中,同样是利用boundingRectWithSize来实现动态返回高度,此时返回的是cell的高度,所以不能仅仅返回bounds.size.height,而需要加上所有控件的间距以及控件自身的高
1.在自定义UITableViewCell中,重写init方法,在里面创建一个Label,frame值可以给zero,因为在动态返回中也会给出
// 地址label 根据字符串动态返回高度
// 需要设置 自动换行属性,字体大小属性
self.addressLabel = [[UILabel alloc]initWithFrame:CGRectZero];
// 自动换行
self.addressLabel.numberOfLines = 0;
// 字体大小
self.addressLabel.font = [UIFont systemFontOfSize:17];
self.addressLabel.backgroundColor = [UIColor brownColor];
[self.contentView addSubview:_addressLabel];
[_addressLabel release];
label要设置为自动换行,numberOfLines属性,设置为0
2.在返回addressLabel高度的方法中用动态返回,label中的text是通过传过来的model定义的
self.addressLabel.text = model.address;
CGRect bounds = [model.address boundingRectWithSize:CGSizeMake(100, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:17] forKey:NSFontAttributeName] context:nil];
self.addressLabel.frame = CGRectMake(10, 90, 100, bounds.size.height); bounds里的字体要和init方法里的一样(systemFontOfSize:17),让后重新赋值给frame
3.返回整个cell的高度的方法
从controller里传入一个model,根据model.address来决定最后该cell的高度
+ (CGFloat)heightForCell:(Model *)model
{
// 宽度仍然是限制在100的宽度
// 而高度是动态返回的
CGRect bounds = [model.address boundingRectWithSize:CGSizeMake(100, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:17] forKey:NSFontAttributeName] context:nil];
return 10 + 30 +10 +30 +10 + bounds.size.height + 10;
} return高度要把cell上所有控件的高度和间隙都加上去
4.在controller返回cell高度的代理方法中,调用上面的方法
首先需要取出该cell对应的model
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Model *model = self.modelArray[indexPath.row];
return [MyTableViewCell heightForCell:model];
}
ps:如果一个cell中有多个动态高度的label或其他控件,需要把多个动态高度都加上
Xcodel版本:6.3.2
模拟器:iPhone6
其他:使用MRC
功能:动态返回cell高度
动态返回cell高度
使用场景:当cell上的某一个控件(通常是lable),需要根据字符串的长度来决定自身的高度,此时就需要动态返回cell高度,cell的高度最终是cell上各控件的间距以及各控件自身的高度
第一步:在自定义cell类里,赋值model的方法里面,根据model的某一给定值,来决定这个label自身的高度,通过boundingRectWithSize方法,这个方法里,宽度一定要和label的宽度保持一致,字体大小一定要和label的字体大小保持一致,最终我们所得到的bounds.size.height就是我们根据字符串的长度,返回出来的高度
第二步:需要在自定义cell类里面,添加一个类方法,专门提供给controller
返回行高的方法里调用,用于返回行高的方法要比返回cell的方法先执行,所以我们同样也需要在返回行高的方法里得到model,并最终传入到自动以cell里的类方法中,同样是利用boundingRectWithSize来实现动态返回高度,此时返回的是cell的高度,所以不能仅仅返回bounds.size.height,而需要加上所有控件的间距以及控件自身的高
1.在自定义UITableViewCell中,重写init方法,在里面创建一个Label,frame值可以给zero,因为在动态返回中也会给出
// 地址label 根据字符串动态返回高度
// 需要设置 自动换行属性,字体大小属性
self.addressLabel = [[UILabel alloc]initWithFrame:CGRectZero];
// 自动换行
self.addressLabel.numberOfLines = 0;
// 字体大小
self.addressLabel.font = [UIFont systemFontOfSize:17];
self.addressLabel.backgroundColor = [UIColor brownColor];
[self.contentView addSubview:_addressLabel];
[_addressLabel release];
label要设置为自动换行,numberOfLines属性,设置为0
2.在返回addressLabel高度的方法中用动态返回,label中的text是通过传过来的model定义的
self.addressLabel.text = model.address;
CGRect bounds = [model.address boundingRectWithSize:CGSizeMake(100, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:17] forKey:NSFontAttributeName] context:nil];
self.addressLabel.frame = CGRectMake(10, 90, 100, bounds.size.height); bounds里的字体要和init方法里的一样(systemFontOfSize:17),让后重新赋值给frame
3.返回整个cell的高度的方法
从controller里传入一个model,根据model.address来决定最后该cell的高度
+ (CGFloat)heightForCell:(Model *)model
{
// 宽度仍然是限制在100的宽度
// 而高度是动态返回的
CGRect bounds = [model.address boundingRectWithSize:CGSizeMake(100, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:17] forKey:NSFontAttributeName] context:nil];
return 10 + 30 +10 +30 +10 + bounds.size.height + 10;
} return高度要把cell上所有控件的高度和间隙都加上去
4.在controller返回cell高度的代理方法中,调用上面的方法
首先需要取出该cell对应的model
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Model *model = self.modelArray[indexPath.row];
return [MyTableViewCell heightForCell:model];
}
ps:如果一个cell中有多个动态高度的label或其他控件,需要把多个动态高度都加上
相关文章推荐
- iOS开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- IOS开发代码分享之获取启动画面图片的string
- IOS开发之路--C语言数组和字符串
- IOS开发代码分享之用nstimer实现倒计时功能
- UITableView 实现汽车品牌(demo)
- IOS开发代码分享之设置UISearchBar的背景颜色
- ios开发之环境搭建-01
- UITableView 基本使用方法总结
- UITableView一些易混属性和方法
- 在开发iOS程序时对日期处理的总结
- UITableView的详细讲解
- iOS开发——keychain的使用
- iOS Graphics Technologies iOS 图形技术
- iOS开发异常错误总结
- (转)UITableViewController重要配置方法和Delegate
- UITableView详细用法,UITableView指南,UITableView详细教程
- 学习Objective-C:入门手册
- iOS开发 简单实现视频音频的边下边播
- ios隐藏uitableview下面多余的tableview的线条