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.