2016-02-05 229 views
3

我正在使用此字符串擴展名從字符串中的HTML標記中獲取正確的屬性文本。NSAttributedString更改字體大小

extension String { 

    var html2AttributedString: NSAttributedString? { 
     guard 
      let data = dataUsingEncoding(NSUTF8StringEncoding) 
      else { return nil } 
     do { 
      return try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute:NSUTF8StringEncoding ], documentAttributes: nil) 

     } catch let error as NSError { 
      print(error.localizedDescription) 
      return nil 
     } 
    } 
    var html2String: String { 
     return html2AttributedString?.string ?? "" 
    } 
} 

,我使用一個UICollectionView內的UILabel值。

if let value = mainNote.html2AttributedString 
{ 
    cell.note.attributedText = value 
} 
else 
{ 
    cell.note.text = mainNote 
} 

這種方法效果很好。但默認情況下,它帶有大小爲11的「Times New Roman」字體。所以我想讓它變得更大一點。我嘗試使用NSMutableAttributedString

if let value = mainNote.html2AttributedString 
{ 
    let mutableString = NSMutableAttributedString(string: value.string, attributes: [NSFontAttributeName : UIFont(name: "Times New Roman", size: 20)!]) 
    cell.note.attributedText = mutableString 
} 
else 
{ 
    cell.note.text = mainNote 
} 

哪個實際上什麼都沒做。

如果我直接增加UILabel的字體大小,字體大小會增加,但斜體屬性不起作用。

cell.note.font = UIFont(name: "Times New Roman", size: 16) 

請幫我在這裏使字符串稍大一點。

+0

您將需要設置UIFont(名稱: 「TimesNewRomanPS-ItalicMT」,尺寸:16) – Shripada

+0

@ Shripada這使得整個文本斜體,我只想要歸因字符串。 –

+0

我想我沒有得到你真正想要的東西? – Shripada

回答

1

使用此更新擴展:

extension String { 

func html2AttributedString(font: UIFont?) -> NSAttributedString? { 
    guard 
     let data = dataUsingEncoding(NSUTF8StringEncoding) 
     else { return nil } 
    do { 

     let string = try NSAttributedString(data: data, options: [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding], documentAttributes: nil) 

     let newString = NSMutableAttributedString(attributedString: string) 
     string.enumerateAttributesInRange(NSRange.init(location: 0, length: string.length), options: .Reverse) { (attributes : [String : AnyObject], range:NSRange, _) -> Void in 
       if let font = font { 
        newString.removeAttribute(NSFontAttributeName, range: range) 
        newString.addAttribute(NSFontAttributeName, value: font, range: range) 
       } 
     } 
     return newString 

    } catch let error as NSError { 
     print(error.localizedDescription) 
     return nil 
    } 
} 
var html2String: String { 
    return html2AttributedString(nil)?.string ?? "" 
} 

}

用法:

if let value = mainNote.html2AttributedString(UIFont(name: "Times New Roman-ItalicMT", size: 20)) 
{ 
    cell.note.attributedText = value 
} 
else 
{ 
    cell.note.text = mainNote 
} 
+0

您是否解決了您的問題? – iOSEnthusiatic