2017-07-07 1 views
0

Je voudrais créer le paragraphe avec Read More/Read Less à la fin.
Voici mes codes;
Comment régler la hauteur de l'étiquette pour l'ajustement automatique Lire la suite/Moins avec Swift 3?

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 

    } 

} 


Je mets également l'étiquette "Word wrap" dans les attributs inspecteur.
Le problème est que lorsque j'ajoute "NSLineBreakMode.byTruncatingHead" dans la partie Read Less, tous les textes s'affichent complètement. Mais, certains mots dans ces endroits à l'intérieur du texte disparaissent. Donc, je supprime ce code et lance l'application. À ce moment-là, les textes ne sont pas montrés complètement et montrent seulement la moitié. J'ai essayé de résoudre ce problème toute la journée.
Je ne veux utiliser aucune autre bibliothèque.
Quelqu'un pourrait-il m'aider s'il vous plaît?

Répondre

1

Supprimer contrainte lblReviewHeight, puis juste essayer d'utiliser numberOfLines contrôle votre mise en page de texte, si votre voulez montrer toute la description ensemble numberOfLines = 0, sinon numberOfLines à la ligne que vous voulez.

+0

Je n'ai pas pu supprimer lblReviewHeight car il contrôle la hauteur de l'étiquette lorsque je clique sur le bouton Lire plus/moins. –

+0

@MayPhyu mise en page automatique calculera automatiquement la hauteur pour nous si vous avez une bonne contrainte de cette étiquette, cela signifie que si votre étiquette a correctement les contraintes de 'largeur 'ou' leading' 'trailing' ou' left' 'right' ou donne un 'preferredMaxLayoutWidth' vous obtiendrez une' meilleure 'taille de cette étiquette. –

0

pour calculer la hauteur du texte par la police et la largeur, vous pouvez utiliser cette extension

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

puis l'appeler

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

bro @VadimKozak, bro quel code dois-je supprimer ou remplacer dans mes codes bro? –