Display HTML text in UILabel iphone Display HTML text in UILabel iphone xcode xcode

Display HTML text in UILabel iphone


You can do it without any third-party libraries by using attributed text. I believe it does accept HTML fragments, like the one you're getting, but you may want to wrap it in a complete HTML document so that you can specify CSS:

static NSString *html =    @"<html>"     "  <head>"     "    <style type='text/css'>"     "      body { font: 16pt 'Gill Sans'; color: #1a004b; }"     "      i { color: #822; }"     "    </style>"     "  </head>"     "  <body>Here is some <i>formatting!</i></body>"     "</html>";UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 200)];NSError *err = nil;label.attributedText =    [[NSAttributedString alloc]              initWithData: [html dataUsingEncoding:NSUTF8StringEncoding]                   options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }        documentAttributes: nil                     error: &err];if(err)    NSLog(@"Unable to parse label text: %@", err);

Not concise, but you can mop up the mess by adding a category to UILabel:

@implementation UILabel (Html)- (void) setHtml: (NSString*) html    {    NSError *err = nil;    self.attributedText =        [[NSAttributedString alloc]                  initWithData: [html dataUsingEncoding:NSUTF8StringEncoding]                       options: @{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }            documentAttributes: nil                         error: &err];    if(err)        NSLog(@"Unable to parse label text: %@", err);    }@end

[someLabel setHtml:@"Be <b>bold!</b>"];


Swift 4: version

extension String {    func htmlAttributedString() -> NSAttributedString? {        guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }        guard let html = try? NSMutableAttributedString(            data: data,            options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html],            documentAttributes: nil) else { return nil }        return html    }}

Swift 3: version

extension String {func htmlAttributedString() -> NSAttributedString? {    guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }    guard let html = try? NSMutableAttributedString(        data: data,        options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],        documentAttributes: nil) else { return nil }    return html    }}

Swift 2: version

extension String {        func htmlAttributedString() -> NSAttributedString? {            guard let data = self.dataUsingEncoding(NSUTF16StringEncoding, allowLossyConversion: false) else { return nil }            guard let html = try? NSMutableAttributedString(              data: data,               options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],               documentAttributes: nil) else { return nil }            return html        }}

use it as:

label.attributedText = yourStringVar.htmlAttributedString()


Use RTLabel library to convert the HTML text. I have used it several times. It works. Here is link to the library and a sample code.

https://github.com/honcheng/RTLabel.

Hope I helped.