How to show an HTML string on a UILabel in iOS?
Solution 1:
For iOS7 or more you can use this:
NSString * htmlString = @"<html><body> Some html string </body></html>";
NSAttributedString * attrStr =
[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding]
options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}
documentAttributes:nil error:nil];
UILabel * myLabel = [[UILabel alloc] init];
myLabel.attributedText = attrStr;
Solution 2:
Swift 2
let htmlText = "<p>etc</p>"
if let htmlData = htmlText.dataUsingEncoding(NSUnicodeStringEncoding) {
do {
someLabel.attributedText = try NSAttributedString(data: htmlData,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
} catch let e as NSError {
print("Couldn't translate \(htmlText): \(e.localizedDescription) ")
}
}
Swift 3
let htmlText = "<p>etc</p>"
if let htmlData = htmlText.data(using: String.Encoding.unicode) {
do {
let attributedText = try NSAttributedString(data: htmlData, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)
} catch let e as NSError {
print("Couldn't translate \(htmlText): \(e.localizedDescription) ")
}
}
Solution 3:
Swift 4+
For Swift 4 and above use:
guard let data = "foo".data(using: String.Encoding.unicode) else { return }
try? titleLabel.attributedText =
NSAttributedString(data: data,
options: [.documentType:NSAttributedString.DocumentType.html],
documentAttributes: nil)
Solution 4:
I did this on UITextView as follows:
[detailView loadHTMLString:[NSString stringWithFormat:@"<div style='text-align:justify; font-size:13px;font-family:HelveticaNeue;color:#362932;'>%@",[model.dict valueForKey:@"description"]] baseURL:nil];
Or you can use RTLabel library: https://github.com/honcheng/RTLabel to display html text along with its formatting on a label.
Solution 5:
Extension for Swift 4+
extension UILabel {
func set(html: String) {
if let htmlData = html.data(using: .unicode) {
do {
self.attributedText = try NSAttributedString(data: htmlData,
options: [.documentType: NSAttributedString.DocumentType.html],
documentAttributes: nil)
} catch let e as NSError {
print("Couldn't parse \(html): \(e.localizedDescription)")
}
}
}
}