自定义cell的步骤:
1、将所有cell要显示的子视图控件声明成为属性
2、重写cell的初始化方法,frame给定为CGRectZero,将控件添加到cell上面进行显示,一定要注意是添加到self.contentView上面,因为cell系统内部的控件就是添加在contentView上面,但是cell的辅助视图不是添加到contentView上面,当cell有辅助视图的时候,contentView的宽就会变小
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011211878-694666418.png)
3、重写layoutSubviews方法,给定内部控件的具体位置,宏定义的kWidth要是self.frame.size.width,最好不要用self.contentView的宽,因为有辅助视图的时候,self.contentView的宽会变
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011235644-1773454325.png)
4、导入模型,将模型与cell绑定,声明模型属性,也是简化外部的代码
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011257738-1316474921.png)
5、重写模型属性的setter方法,内部使用模型为内部控件赋值
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011320159-1518373056.png)
6、赋值完成之后在table每行显示的cell协议的内部,传入每行的模型,以便赋值
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011402956-1411929425.png)
7、有些文本的内容大小不一样的时候,可以自定义宽高
(1)可以先定义两个类方法(实例方法也可以,不过使用起来不方便)
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011450738-1664239624.png)
(2)求一段文本的显示高度的方法实现
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011513769-281381921.png)
(3)返回cell的高度的方法实现
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011553034-446647293.png)
(4)到layoutSubviews方法中修改自我介绍的高度为自适应
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011609597-1958758641.png)
(5)再到返回每行多高的协议里面实现方法,根据不同的文本和不同的cell返回不同的值
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011640003-476155019.png)
拓展:图片按比例缩放
![](https://images2015.cnblogs.com/blog/890519/201602/890519-20160219011716097-1237575022.png)