cell的自定义高度有两种方式,第一种也是最方便的利用利用系统方法计算出高度
提供一种计算文本宽高的方法
这是一个自写函数,核心是--**NSString的实例方法**--使用了系统的boundingRectWithSize:CGSizeMake(width,height) optins:() attributes:()context:方法这个方法
需要我们提供固定的一个宽度或者一个高度,
如果宽度设置为MaxFloat,高度给定,则最后计算出一个CGRect会根据内容content计算出相应的宽度。
同样,如果高度设置为MaxFloat,最后会计算出一个CGRect,其高度是根据content计算出的
一般我们在模型的内部定义一个height属性用来给cell返回高度,把cell高度的计算放在了模型的里面,但是要先设置tableView estimatedHeightForRowAtIndexPath属性,设置这个属性后cell会先生成model,然后去获取高度,使用这个方法注意点
-
options:这个参数比较重要
1.NSStringDrawingUsesLineFragmentOrigin:绘制文本时使用 line fragement origin 而不是 baseline origin。 2.NSStringDrawingUsesFontLeading:计算行高时使用行距。(字体大小+行间距=行距) 3.NSStringDrawingTruncatesLastVisibleLine:如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。如果没有指定NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略。 4.计算布局时使用图元字形(而不是印刷字体)。Use the image glyph bounds (instead of the typographic bounds) when computing layout.
attributes:文本属性
一个字典,里面包含了文字的各种属性
(2)NSFontAttributeName : [UIFont systemFontOfSize:_fontSize] 设置字体
(3)NSForegroundColorAttributeName :[UIColor redColor] 设置文字颜色
(4)NSParagraphStyleAttributeName : paragraph 设置段落样式
(5)NSMutableParagraphStyle *paragraph=[[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
(6)NSBackgroundColorAttributeName: [UIColor blackColor] 设置背景颜色
(7)NSStrokeColorAttributeName设置文字描边颜色,需要和NSStrokeWidthAttributeName设置描边宽度,这样就能使文字空心.
context:一般传 nil 。
第二种方式是利用layout的自动收缩来计算cell的高度
在cell接受到model以后开始布局子控件是我们可以利用 CGRectGetMaxY(self.contentLabel.frame)获得此时布局好的高度
但是在他之前一定记得加self.layoutIfNeeded(),因为cell刚拿到数据没有还没有进行布局,想要布局必须先进行刷新布局self.layoutIfNeeded(),刷新过后把高度返给model.height,在外面显示数据,这种方法比较简单但是不建议使用,坑比较多,第二种方式有bug,如果对源码感兴趣---滴滴我