1. 程式人生 > >iOS UILabel 顯示 html

iOS UILabel 顯示 html

效果圖:


實現:

#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