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;
}