2017-07-07 91 views
0

我想在最後創建帶有Read More/Read Less的段落。
這是我的代碼;
如何使用Swift 3設置標籤高度來自動調整Read More/Less?

func getLabelHeight(text: String, width: CGFloat, font: UIFont) -> CGFloat { 

    let lbl = UILabel(frame: .zero) 
    lbl.frame.size.width = width 
    lbl.font = font 
    lbl.numberOfLines = 0 
    lbl.text = text 
    lbl.sizeToFit() 
    lbl.adjustsFontSizeToFitWidth = true 
    return lbl.frame.size.height 

} 


@IBAction func btnReadMore(_ sender: Any) { 
    if isLabelAtMaxHeight { 

     btnReadmore.setTitle(NSLocalizedString("Read more", comment: ""), for: .normal) 
     btnReadmore.titleLabel!.font = UIFont (name: "Tharlon", size: 13) 
     isLabelAtMaxHeight = false 
     lblReviewHeight.constant = 29 
     lblReview.font = UIFont (name: "Tharlon", size: 13) 


    } 
    else { 

     btnReadmore.setTitle(NSLocalizedString("Read less", comment: ""), for: .normal) 
     btnReadmore.titleLabel!.font = UIFont (name: "Tharlon", size: 13) 
     isLabelAtMaxHeight = true 
     lblReviewHeight.constant = getLabelHeight(text: lblReview.text!, width: view.bounds.width, font: lblReview.font) 
     lblReview.font = UIFont (name: "Tharlon", size: 13) 
     lblReview.lineBreakMode = NSLineBreakMode.byTruncatingHead 

    } 

} 


我還設置在屬性檢查器中的標籤 「自動換行」。
問題是,當我在Read Less部分添加「NSLineBreakMode.byTruncatingHead」時,所有文本都完全顯示。但是,文字內部的某些字詞消失了。

因此,我刪除該代碼並運行應用程序。那時,文本沒有完整顯示,只顯示一半。我一整天都在努力解決這個問題。
我不想使用任何其他庫。
任何人都可以幫助我嗎?

回答

1

刪除約束lblReviewHeight,那麼就嘗試使用numberOfLines控制你的文字排版,如果你想顯示所有描述集numberOfLines = 0,否則將numberOfLines設置爲你想要的行。

+0

兄弟我無法刪除lblReviewHeight,因爲它控制標籤的高度,當我點擊Read more/less按鈕時。 –

+0

@MayPhyu如果您對該標籤有正確的約束,那麼@MayPhyu自動佈局會自動爲我們計算高度,這意味着如果您的標籤正確限制了「寬度」或「前導」「尾部」或「左」「右」或給出一個'preferredMaxLayoutWidth',你會得到這個標籤的最佳尺寸。 –

0

的字體來計算文本的高度和寬度,你可以使用這個擴展

extension UIFont { 
func sizeOfString (_ string: String, constrainedToWidth width: CGFloat) -> CGSize { 
    return NSString(string: string).boundingRect(with: CGSize(width: width, height: CGFloat.greatestFiniteMagnitude), 
                 options: NSStringDrawingOptions.usesLineFragmentOrigin, 
                 attributes: [NSFontAttributeName: self], 
                 context: nil).size 
} 
} 

然後調用它

let width = 290.0 
let textSize = UIFont.systemFont(ofSize: 15).sizeOfString("text", constrainedToWidth: width) 
+0

bro @VadimKozak,bro哪些代碼應該在我的代碼bro中刪除或替換? –