Record what UILabel to load rich text iOS

Under normal circumstances we are accustomed to load rich text with webview. But webview relatively consume memory. And then found itself in fact can be used uilabel loaded, performance is also good to record ~~

The following two core methods

 

- (NSMutableAttributedString *) setAttributedString: (NSString * ) STR 
{ 
// if wrap, the \ n replaced by a
 // If necessary add to wrap 
 STR = [STR stringByReplacingOccurrencesOfString: @ " \ n " withString: @ " a " ];
 // set HTML image width 
 STR = [NSString stringWithFormat: @ " <head> <style> IMG {width: Important% F; height:! Auto} </ style> </ head >% @ " , [The UIScreen mainScreen] .bounds.size.width, STR]; 
 NSMutableAttributedString * = htmlString[[NSMutableAttributedString alloc] initWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute:[NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:NULL error:nil];
//设置富文本字的大小
 [htmlString addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]} range:NSMakeRange(0, htmlString.length)];
//设置行间距
 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle setLineSpacing:5];
 [htmlString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [htmlString length])];
    return htmlString;
}

//计算html字符串高度
-(CGFloat )getHTMLHeightByStr:(NSString *)str
{
  str = [str stringByReplacingOccurrencesOfString:@"\n" withString:@"<br/>"];
  str = [NSString stringWithFormat:@"<head><style>img{width:%f !important;height:auto}</style></head>%@",[UIScreen mainScreen].bounds.size.width,str];

    NSMutableAttributedString *htmlString =[[NSMutableAttributedString alloc] initWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute:[NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:NULL error:nil];
    [htmlString addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:16]} range:NSMakeRange(0, htmlString.length)];
    //设置行间距
    NSMutableParagraphStyle *paragraphStyle1 = [[NSMutableParagraphStyle alloc] init];
    [paragraphStyle1 setLineSpacing:5];
    [htmlString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle1 range:NSMakeRange(0, [htmlString length])];
    
    CGSize textSize = [htmlString boundingRectWithSize:(CGSize){kScreenWidth - 30, CGFLOAT_MAX} options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;
    return textSize.height ;
}

 

Guess you like

Origin www.cnblogs.com/110-913-1025/p/11946987.html