2017-07-07 5 views
0

Ich möchte den Absatz mit Read More/Read Less am Ende erstellen.
Hier sind meine Codes;
Wie wird die Etikettenhöhe für die automatische Anpassung in Read More/Less mit Swift 3 eingestellt?

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 

    } 

} 


ich auch die Bezeichnung "Zeilenumbruch" in Attribute Inspector eingestellt.
Das Problem ist, dass, wenn ich hinzufügen "NSLineBreakMode.byTruncatingHead" in weniger lesen, zeigen alle Texte vollständig. Aber einige Wörter an diesen Stellen im Text verschwinden.

Also, ich entfernen diesen Code und führen Sie die App. Zu dieser Zeit werden Texte nicht vollständig gezeigt und zeigen nur die Hälfte. Ich habe versucht, das Problem den ganzen Tag zu lösen.
Ich möchte keine andere Bibliothek verwenden.
Könnte mir bitte jemand helfen?

Antwort

1

Remove Einschränkung lblReviewHeight, dann versuchen Sie können nur numberOfLines Kontrolle Ihren Text Layout zu verwenden, wenn Sie möchten alle Beschreibung anzeigen numberOfLines = 0, sonst setzen Sie numberOfLines auf die gewünschte Zeile.

+0

bro Ich konnte lblReviewHeight nicht entfernen, weil es die Höhe des Etiketts steuert, wenn ich auf Read/less button klicke. –

+0

@MayPhyu Auto-Layout wird automatisch die Höhe für uns berechnen, wenn Sie eine rechte Einschränkung der Bezeichnung haben, das heißt, wenn Ihre Bezeichnung korrekt Einschränkungen von "Breite" oder "Führende" "Nachlaufende" oder "Links" "rechts" oder gibt Mit 'preferredMaxLayoutWidth' erhalten Sie eine' beste' Größe dieses Labels. –

0

zur Texthöhe von Schriftart zu berechnen und Breite Sie diese Erweiterung

es
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 
} 
} 

dann rufen

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

bro @VadimKozak, bro welchen Code soll ich in meinen Codes entfernen oder ersetzen? –

Verwandte Themen