欢迎使用CSDN-markdown编辑器
来源:互联网 发布:mac系统怎么制作铃声 编辑:程序博客网 时间:2024/06/03 22:56
自定义不等高cell-storyboard(iOS8以及适用所有)
使用storyboard注意
1.在头文件中将控制器改为继承于UITableViewController
2.在storyboard中将原来的viewController删掉,添加上一个tableViewControlller,同时将现在的控制器设置中的Is Initial View Controller勾选
3.将cell的重用标识设置为自己的重用标识
第一种:适用于iOS8及以后
重点:UITableViewAutomaticDimension适配于iOS8及以后
步骤:
+ 1.在控制器中,在viewDidLoad方法中:
//自动计算rowHeight self.tableView.rowHeight = UITableViewAutomaticDimension; //预估高度 self.tableView.estimatedRowHeight = 40;
- 2.在自定义cell的.m文件中,拿到配图的高度约束和距离底部约束
//拿到配图的高度约束和距离contentView的底部约束@property (weak, nonatomic) IBOutlet NSLayoutConstraint *pictureHeight;@property (weak, nonatomic) IBOutlet NSLayoutConstraint *pictureBottom;
- 3.在自定义cell的.m文件中,在模型的setter方法中判断是否有配图,并根据是否有配图,计算出高度约束和距离底部约束的值
//判断是否有配图,如果有则将配图的高度约束重新设置为100,距离底部约束设置为10; if (status.picture) { self.pictureHeight.constant = 100; self.pictureBottom.constant = 10; self.picture_imageView.image = [UIImage imageNamed:status.picture]; //如果没有则将配图的高度约束重新设置为0,距离底部约束设置为0; }else{ self.pictureHeight.constant = 0; self.pictureBottom.constant = 0; }
- 默认一直有图片,实际当有图片时候将图片的高度约束和底部约束设置为正常,没有图片的话,将高度约束和底部约束设置为0;
第二种:自定义不等高cell-storyboard(所有可用)
1.重点:
- 1.1如果不设置预估高度,则所有版本的开发可用,如果设置预估高度,则ios7之后可用(设置预估高度的作用是优化性能)
2.重要步骤:
- 2.1.在自定义cell的.h文件中,自定义-(CGFloat)height;方法
- 2.1.1作用:使得控制器中调用heightForRow代理方法时能够调用此方法计算cell的高度
- 2.1.2写在.h文件中的原因:能够被控制器调用
- 2.2.在自定义cell的.m文件中,实现-(CGFloat)height;方法
方法体结构:
- (CGFloat)height{ //1.强制布局(强制布局时候必须要注意,⚠需要手动设置label的宽,并且需要将其设置在awakeForNib方法中,一举两得) [self layoutIfNeeded]; //2.判断最后一个子控件是什么,并通过获得最后一个子控件的最大y值计算出cell的高度 CGFloat height = 0; if (self.status.picture) {//如果有配图,则配图是最后一个子控件,取出它的最大y值加margin就是整个cell的高 height = CGRectGetMaxY(self.picture_imageView.frame) + 10; }else{//如果没有配图,则text_label是最后一个子控件,取出它的最大y值加margin就是整个cell的高 height = CGRectGetMaxY(self.text_label.frame) + 10; } return height;} }
- 2.3.在awakeForNib方法中,手动设置label的最大宽度
- (void)awakeFromNib{ //手动设置宽度的原因 使用layoutIfNeed(强制布局)需要手动设置label的宽度 //设置在这里的原因: 是既能够在显示的cell中设置约束,又能够在计算高度的cell中设置最大宽度 //注意: [UIScreen mainScreen]是屏幕的尺寸,宽度就是在控制器 // 手动设置最大宽度之后,不能在storyboard中再给label设置宽度,否则会报约束警告 self.text_label.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;// self.contentView.frame.size.width的值为0,所以不能使用// self.text_label.preferredMaxLayoutWidth = self.contentView.frame.size.width - 20; }
- 2.4.在控制器中,实现heightForRow方法
#pragma mark - 代理方法//全局变量的原因是只创建一次,从而保证每一个cell只调用一次cell.height,只强制布局一次ZPStatusCell *cell;- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ //如果直接创建cell,会反复的创建,影响性能,所以可以选择先判断// ZPStatusCell *cell = [tableView dequeueReusableCellWithIdentifier:@"status"]; if (!cell) { cell = [tableView dequeueReusableCellWithIdentifier:@"status"]; } //设置数据 cell.status = self.statusArr[indexPath.row]; //调用cell的height方法 return [cell height];}
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- Centos7安装Docker
- <<深度探索c++对象模型>>第一章读书笔记
- 教你透彻了解红黑树
- poj 2184 - Cow Exhibition (01背包) 解题报告
- 单链表的析构函数
- 欢迎使用CSDN-markdown编辑器
- Android中用application在两个activity中进行数据共享(1)
- 如何在Windows平台下安装或卸载Apache服务
- 哈理工2015暑假训练赛BNU16488 Easy Task(简单题)
- wiresharek 分析TCP 报文头
- 编程实现单链表的排序
- [IOS] Class Memory Analysis
- python面向对象
- NLog 相关