欢迎使用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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不小心点击拔打黑客lD视频怎么办 套得太深散户都不卖庄家怎么办 黑色衣领掉色在白衣服上怎么办 电脑缝纫界下线切的短怎么办 喝完酒第二天恶心想吐怎么办 纸上怎么办画5种标准眉 电脑密码忘了怎么办最简单的方法 宿舍六个人有一个不想安空调怎么办 绝地求生开在了进游戏的页面怎么办 桃树树根有很大一个洞怎么办啊 截掉的枝干一直往下干怎么办 大佛肚竹的叶子都黄了怎么办 大佛肚竹的枝和叶都掉了怎么办 网吧锁屏后但我的页面没关怎么办 不干了公司把我东西扔了怎么办 竹子种了3个月也不发芽是怎么办 盆栽橘子树夏季叶子全掉了怎么办 盆栽藕叶子全干了是怎么办 家里的盆栽竹根部长霉怎么办 浅色衣服被蓝彩笔染上色怎么办 pr导出视频后显示素材丢失怎么办 ps抠下来的图边缘发白怎么办 ps中抠出的图边缘虚不圆滑怎么办 ps的文字工具多了圆框怎么办 苹果6s屏幕锁忘了密码怎么办 网上下载的3d模型渲染很慢怎么办 cad下载完成后出现闪退怎么办 婴儿在肚子里被系带绑到怎么办 我想给外地的朋友送花怎么办 英雄联盟连接不上聊天服务器怎么办 用黄金换玫瑰金后悔了怎么办 劳力士日志系列玫瑰金和黄金怎么办 香菇代进地注水后长满绿毛怎么办 群主给你带了不满意的头衘怎么办 普兰德雪地靴洗变色了怎么办 书被水泡了皱了黏了怎么办 书被水泡了皱了没干怎么办 眼皮干燥起皮起皱怎么办能治好吗 手指头起小水泡指甲不平整怎么办 这几天我的内裤上带点血丝怎么办 一个月宝宝私处捂白了怎么办