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(".")
}
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