2017-07-05 2 views
0

J'ai une vue de collection avec UILabels qui sont contraints à la largeur et la hauteur de leur cellule conteneur. Chaque UILabel a un texte personnalisable. Je voudrais que ce texte se rétrécisse et que les mots soient enveloppés de façon à ce que le texte soit le plus large possible. J'ai essayé beaucoup, beaucoup de threads, lu des solutions dans objc, et rien ne fonctionne. Je ne peux pas comprendre ça. Ce que nous voyons ici est juste une taille de police minimale avec Truncate Tail, qui est censé fonctionner, mais ça continue à se couper et je n'arrive pas à comprendre pourquoi.Autosize Multiline UILabel avec Word Wrapping dans Swift

Quelqu'un at-il des conseils pour moi? J'ai essayé quelques solutions de programmation mais rien n'a fonctionné jusqu'ici.

C'est ce que je reçois:

What I am getting

C'est ce que je veux:

What I want

Répondre

0

Cela peut fonctionner pour vous

var label = UILabel() 
label.text = "Harvard Hills" // "Willis 7", "Arbs" 
label.numberOfLines = 2 
label.lineBreakMode = .byWordWrapping 
label.minimumScaleFactor = 0.6 . // Important - set minimum scale factor 

// Now an answer to your question 
let numOflines = label.numberOfLines 

Maintenant, rafraîchissez votre étiquette, en utilisant layoutSubviews ou layoutIfNeeded du contrôleur de vue et réduisez la taille de la police en utilisant le nombre de lignes.

if numOflines > 1 { 
    label.font = // reduce font size (by 4 or 8 points) 
} 

Voici résultat (j'ai créé l'étiquette DesignAble et il condition définie):

enter image description here