思路:可以根据展示过文案之后,label的高度是否大于某个高度来判断
是否大于某个行数
1 需求背景,当文案大于两行的时候,要展示展开按钮,否则不展示
这就需要我们判断当前的文案是否大于两行,但是UIKIt是没有这样的接口供我们使用的,
我们自己来计算,展示两行所用的高度,完全展示所用的高度,两个一对比,就可以判断出是否
大于两行了
extern CGFloat YYheightForAttributeStringWithLabelFixLinespacingAndNumberOfLines(NSAttributedString *str, CGFloat width, int numberOfLines)
{
///传入富文本,限制行数,宽度,获取内容高度
UILabel *textView = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, width, CGFLOAT_MAX)];
textView.textAlignment = NSTextAlignmentLeft;
textView.numberOfLines = numberOfLines;
textView.lineBreakMode = NSLineBreakByWordWrapping;
textView.attributedText = str;
CGFloat height = [textView sizeThatFits:CGSizeMake(width, CGFLOAT_MAX)].height;
textView = nil;
return height;
}
CGFloat unfoldHeight = YYheightForAttributeStringWithLabelFixLinespacingAndNumberOfLines(attributeString, ScreenWidth-30*PLUS_SCALE, 0);
CGFloat foldHeight = YYheightForAttributeStringWithLabelFixLinespacingAndNumberOfLines(attributeString, ScreenWidth-30*PLUS_SCALE, 2);
if (unfoldHeight > foldHeight) {
///内容大于两行
[self addExpand];
self.introductionLabel.numberOfLines = 2;
} else {
///内容小于两行
self.introductionLabel.truncationToken = nil;
self.introductionLabel.numberOfLines = 0;
}
注意:我们是不能获取富文本展示的行数的,可以计算,但是计算并不精确,但是经过测试,我们判断某段文案是否大于某个行数是可以精确算出来的