效果图:
实现:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString * htmlString = @"<html><body>PM<sub>2.5<sub> <font size=\"13\" color=\"red\">hello world!</font> </body></html>";
UILabel * label = [[UILabel alloc] initWithFrame:self.view.bounds];
label.attributedText = [self strToAttriWithStr:htmlString];
[self.view addSubview:label];
CGRect rect = label.frame;
rect.size.height = [self getAttriHeightWithLabel:label width:self.view.bounds.size.width];
label.frame = rect;
}
/**
* 富文本转html字符串
*/
- (NSString *)attriToStrWithAttri:(NSAttributedString *)attri{
NSDictionary *tempDic = @{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute:[NSNumber numberWithInt:NSUTF8StringEncoding]};
NSData *htmlData = [attri dataFromRange:NSMakeRange(0, attri.length)
documentAttributes:tempDic
error:nil];
return [[NSString alloc] initWithData:htmlData
encoding:NSUTF8StringEncoding];
}
/**
* 字符串转富文本
*/
- (NSAttributedString *)strToAttriWithStr:(NSString *)htmlStr{
return [[NSAttributedString alloc] initWithData:[htmlStr dataUsingEncoding:NSUnicodeStringEncoding]
options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}
documentAttributes:nil
error:nil];
}
/**
*获得富文本的高度
**/
-(CGFloat)getAttriHeightWithLabel:(UILabel *)label width:(CGFloat)width {
CGFloat height = [label.attributedText boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size.height;//针对富文本
return height;
}
@end