问题描述:在计算多行文本的时候,有指定行高的时候,针对单行文本的高度需要考虑实际UI的效果,因为计算出来的高度由字号和行高决定,但是单行时候的文本UI 是不需要下面的行高的,所以需要特别的注意这个问题,针对单行文本是否需要去除这个行高。
/**
* @param needRevise : yes: 针对多行模式下的单行文本高度进行修正;
* no :不修正,那么单行文本的高度就是字体+行高,在UI布局的状况下,这可能不是想要的效果,计算cell 高度的时候,这部分就会产生不必要的空白,cell 计算出来的高度就会比预期的高度要高,看起来有点空白
*/
+(CGFloat)returnTextheightWithText:(NSAttributedString*)content withRectWishSize:(CGSize)contentSize withLineSpacing:(CGFloat)_lineSpacing withFontSize:(NSInteger)fontSize lineBreakMode:(NSLineBreakMode)lineBreakMode textAlignmentLeft:(NSTextAlignment)textAlignment needRevise:(BOOL)needRevise block:(void (^)(BOOL isSingle))block{
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode =lineBreakMode;
paragraphStyle.alignment = textAlignment;
paragraphStyle.lineSpacing =_lineSpacing;
NSDictionary * attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:fontSize],
NSParagraphStyleAttributeName : paragraphStyle};
CGSize sizeContent = [[content string] boundingRectWithSize:contentSize
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:attributes
context:nil].size;
NSInteger height = sizeContent.height + 1;
CGSize sizeSingle =[content.string sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]}];
NSInteger singlelineHeight = ceilf(sizeSingle.height) + _lineSpacing;
if (labs(height - singlelineHeight) < 2) {//单行-修正
if (needRevise) {
height = ceilf(fontSize);
}
if (block) {
block(YES);
}
}else{
if (block) {
block(NO);
}
}
return height;
}