2017-05-25 1 views
2

Je veux savoir s'il existe un moyen de déterminer si un UILabel est plein du texte. Par exemple, si une étiquette avec la taille de:Comment remplir une étiquette avec du texte jusqu'à ce qu'il atteigne sa largeur

|   | 

Je veux savoir quand l'étiquette est pleine de texte, tel que:

|.........| 

je dois remplir son avec des points jusqu'à ce que il atteint la largeur textFields.

+0

Vous pouvez obtenir la largeur de l'étiquette et la largeur du texte (via https://stackoverflow.com/q/1324379/2442804) et de comparer les deux – luk2302

Répondre

2

Eh bien, si je l'ai raison, probablement qu'est-ce que vous recherchez est étiquette intrinsicContentSize:

la taille naturelle pour la vue de réception, considérant uniquement les propriétés de la vue elle-même.

la largeur de l'étiquette intrinsicContentSize doit être la largeur réelle de l'étiquette, peu importe ce qui est la valeur frame.size.width.

Sur cette base, vous mettre en œuvre simplement:

let lbl = UILabel(frame: CGRect(x: 0, y: 0, width: 150, height: 21)) 

print(lbl.frame.size.width) 
// 150.0 

lbl.text = "" 

let intrinsicSizeWidth = lbl.intrinsicContentSize.width 
// since the label text is still empty, its value should be 0.0 

print(intrinsicSizeWidth) 

while lbl.intrinsicContentSize.width < lbl.frame.size.width { 
    lbl.text?.append(".") 
} 

print(lbl.text!) 
// ................................ 

Notez que l'augmentation de la largeur de votre étiquette serait conduit à contient plus de points:

let lbl = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21)) 

. 
. 
. 

print(lbl.text!) 
// ........................................... 

De toute évidence, si vous voulez comparer avec un UITextField -par exemple- (comme vous l'avez mentionné dans la question), il devrait être:

// "textField" the name of your text field... 
while lbl.intrinsicContentSize.width < textField.frame.size.width { 
    lbl.text?.append(".") 
} 
1

Créer une étiquette avec le cadre et le texte par défaut

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 100)) 
label.text = "" 

texte Populate avec des points jusqu'à ce que la largeur du texte atteint la largeur de l'étiquette

while label.sizeThatFits(label.frame.size).width <= label.frame.width { 
    label.text = label.text! + "." 
}