自定义等高cell和不等高cell的方式对比

UITableViewCell总结
**只要是自定义控件就会调用该方法: - ( void )layoutSubviews

{

    NSLog(@"=======");

}

一:等高cell

A:自定义等高cell:
1.需在- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier该方法中添加子控件

2.在程序加载启动时注册 [self.tableVIew registerClass:[XBCell class] forCellReuseIdentifier:ID];(这种注册方式就在创建的时候就会自动去实现上述initWithStyle
方法)

3.注意:自定义cell,即用了- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier这个方法就不会调用- (void)awakeFromNib {

  NSLog(@"--------");

}

这个方法.
4.注意:既然是等高cell,自定义尺寸的时候最好用Masonry比较简便

B:通过storybord:创建动态等高cell

1.无需注册直接调用方法:XBCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];因为没有注册系统默认就会去 storybord 里面找看有没有动态的ID标志的cell

2.在 storybord 里面直接利用Auto Layout技术直接约束子子控件(最方便)

3.只要把cell类型名改为自定义cell的类型名就会调用- (void)awakeFromNib{ }该方法,因为从 storybord 也算是nib文件,可以在该方法中初始化一些东西;

C:通过创建xib文件创建等高cell
1:  需要在程序加载启动时注册:[self.tableVIew registerNib:[UINib nibWithNibName:NSStringFromClass([XBStatusCell class]) bundle:nil] forCellReuseIdentifier:IDX];

2:在xib里面直接利用Auto Layout技术直接约束子子控件(最方便)

3:会调用- (void)awakeFromNib{ }该方法,xib就是nib文件,可以在该方法中初始化一些东西;

二:不等高cell
**注意:不等高cell除了使用 storybord(ios8才有的新技术)不需要实现代理方法返回高度外:- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath,其于方法要实现不等高都要实现该方法

A:自定义(通过代码)不等高cell:
1.需在- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier该方法中添加子控件

2.在程序加载启动时注册 [self.tableVIew registerClass:[XBCell class] forCellReuseIdentifier:ID];(这种注册方式在创建的时候就会自动去实现上述initWithStyle方法)

3.需在模型里面添加个cell高度属性,并计算高度

B:通过storybord:创建动态不等高cell
B - 1:ios8新技术:


1:在程序加载必须设置这两个属性(缺一不可)

    self.tableView.rowHeight = UITableViewAutomaticDimension;

    self.tableView.estimatedRowHeight = 44;// 预估高度,可以随便写


2:在storybord里面直接利用Auto Layout技术直接约束子控件(最方便)


B - 2:ios8以前:

1:在程序加载必须设置一个属性

       self.tableView.estimatedRowHeight = 200;// 预估高度,可以随便写

2:  // 手动设置文字的最大宽度(目的是:让label知道自己文字的最大宽度,进而能够计算出自己的frame

    self.text_Label.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;

3:XBStatusCell *cell;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

    if (!cell) {

        cell = [tableView dequeueReusableCellWithIdentifier:@"xiaoMaGe"];

    }


    cell.statusM = self.statusArray[indexPath.row];

    

    return cell.height;

}

你可能感兴趣的:(UI)