多行文本计算问题 :2018-07-19

问题描述:在计算多行文本的时候,有指定行高的时候,针对单行文本的高度需要考虑实际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;
}
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容