2017-06-02 85 views
0

我正在使用NSAttributedString使用以下代碼顯示HTML文本。計算包含HTML的NSAttributedString的高度

do { 
    let html = "<span style=\"font-family: Montserrat-ExtraLight; font-size: 14; line-height: 1.5;\">\(clinic.profile!)</span>" 
    let clinicProfile = try NSAttributedString(
     data: (html.data(using: String.Encoding.unicode, allowLossyConversion: true)!), 
     options: [ 
      NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType 
     ], 
     documentAttributes: nil 
    ) 
    contentView.attributedText = clinicProfile 
    scrollView.addSubview(contentView) 
} catch { 
    print(error) 
} 

我現在要計算的字符串的高度,在HTML中,我使用的HTML標記,如p, strong, em, ul > li, ol > li.

我嘗試下面的代碼。

let size = CGSize(width: view.frame.width, height: 2000) 
let boundingBox = contentView.attributedText.boundingRect(
    with: size, 
    options: [.usesLineFragmentOrigin, .usesFontLeading, .usesDeviceMetrics], 
    context: nil 
) 
print(boundingBox.height) 

這將返回462這是方式較小,然後實際高度,如何正確地計算此高度?

謝謝。

回答

0

我的解決方案做了工作,但問題是,我被錯誤地設置了滾動型的大小,固定的滾動視圖的高度固定我的問題。

let size = CGSize(width: view.frame.width, height: 2000) 
let boundingBox = contentView.attributedText.boundingRect(
    with: size, 
    options: [.usesLineFragmentOrigin, .usesFontLeading, .usesDeviceMetrics], 
    context: nil 
) 
print(boundingBox.height) 
0

調用此方法在您需要的動態高度的標籤

func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat 
{ 
let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude)) 
label.numberOfLines = 0 
label.lineBreakMode = NSLineBreakMode.byWordWrapping 
label.font = font 
label.text = text 
label.sizeToFit() 

return label.frame.height 
} 
+0

這是否會計算字符串內的HTML標籤? –