Déterminer la taille de UILabel basée sur la Corde dans Swift
Je suis en train de calculer la hauteur d'un UILabel basés sur différentes longueurs de Chaîne.
func calculateContentHeight() -> CGFloat{
var maxLabelSize: CGSize = CGSizeMake(frame.size.width - 48, CGFloat(9999))
var contentNSString = contentText as NSString
var expectedLabelSize = contentNSString.boundingRectWithSize(maxLabelSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(16.0)], context: nil)
print("\(expectedLabelSize)")
return expectedLabelSize.size.height
}
Ci-dessus est la fonction en cours-je utiliser pour déterminer la hauteur mais ça ne fonctionne pas. J'apprécierais toute aide que je peux obtenir. Je perfer la réponse rapide et pas Objective C.
Vous devez vous connecter pour publier un commentaire.
Utiliser une extension sur
String
Swift 3
et aussi sur
NSAttributedString
(ce qui est très utile à la fois)Swift 4
Il suffit de changer la valeur de
attributes
dans leextension String
méthodesde
à
String
mais je voulais obtenir la largeur au lieu de la hauteur. J'ai essayé d'utiliser exactement le même code à l'exception de tous les endroits que vous avez utilisé la hauteur, je suis passé à utiliser la largeur et ça ne fonctionne pas.[NSFontAttributeName: font, NSLineBreakMode: .ByWordWrapping]
mais il ne fonctionne pasNSParagraphStyleAttributeName : style
où le style est NSMutableParagraphStylesizeForItemAtIndexPath
dans unUICollectionView
est qu'il semble ignorer le retour deinsetForSectionAt
ceil
fonction, car les tailles sont retournés comme des valeurs fractionnaires et il indique que vous devez utiliser leceil
fonction dans la doc: developer.apple.com/documentation/foundation/nsattributedstring/...De texte multiligne cette réponse ne fonctionne pas correctement.
Vous pouvez construire une autre Chaîne d'extension à l'aide de UILabel
La UILabel obtient une largeur fixe et le .numberOfLines est mis à 0. En ajoutant du texte et de l'appel .sizeToFit() il s'ajuste automatiquement à la bonne hauteur.
Le Code est écrit en Swift 3
sizeToFit
Heres une solution simple c'est de travailler pour moi... à l'instar de certaines autres affiché, mais il ne comprennent pas la nécessité pour l'appelant
sizeToFit
Noter que ce qui est écrit dans Swift 5
Cette poignées de retour à la ligne et autres. Pas le plus élégant de code, mais il fait le travail.
C'est ma réponse à Swift 4.1 et Xcode 9.4.1
Maintenant, vous appelez cette fonction
J'ai trouvé que l'on a accepté de répondre à travaillé pour une largeur fixe, mais pas une hauteur fixe. Pour une hauteur fixe, il serait juste d'augmenter la largeur pour s'adapter à tout sur une seule ligne, sauf s'il y a un saut de ligne dans le texte.
La largeur des appels de fonction de la hauteur de la fonction plusieurs fois, mais c'est un rapide calcul et je n'ai pas remarqué de problèmes de performances à l'aide de la fonction dans les lignes d'un UITable.
minimumTextWrapWidth:CGFloat
?Vérifier le texte de l'étiquette de la hauteur et travaille sur de il