Comment laisser NSTextField croître avec le texte dans la mise en page automatique?
Mise en page automatique de Lion, devrait rendre assez simple pour permettre à un champ de texte (et donc une étiquette) croît avec le texte qu'il contient.
Le champ de texte est défini pour l'envelopper dans Interface Builder.
Ce qui est une manière simple et fiable pour ce faire?
Vous devez vous connecter pour publier un commentaire.
La méthode
intrinsicContentSize
dansNSView
renvoie ce que la vue elle-même pense que sa intrinsèque de la taille du contenu.NSTextField
calcule ce sans tenir compte de lawraps
propriété de sa cellule, il fera rapport sur les dimensions du texte si disposés sur une seule ligne.Par conséquent, une sous-classe personnalisée de
NSTextField
pouvez remplacer cette méthode pour revenir à une meilleure valeur, tel que celui fourni par la cellulecellSizeForBounds:
méthode:Accepté la réponse est basée sur la manipulation des
intrinsicContentSize
mais qui peut ne pas être nécessaire dans tous les cas. Mise en page automatique va augmenter et réduire la hauteur du champ de texte si (a) vous donner le champ de texte d'unepreferredMaxLayoutWidth
et (b) que le champ needitable
. Ces mesures permettent à la zone de texte pour déterminer son intrinsèque de la largeur et de calculer la hauteur nécessaire pour la mise en page automatique. Voir cette réponse et cette réponse pour plus de détails.Encore plus obscurément, il résulte de la dépendance à l'égard du champ de texte est
editable
attribut de mise en forme automatique ne fonctionnera plus si vous êtes en utilisant des liaisons sur le terrain et ne parviennent pas à effacer leConditionally Sets Editable
option.Swift 4
Modifiable De Redimensionnement Automatique NSTextField
Basé sur Peter Lapisu de l'Objective-C post
Sous-classe
NSTextField
, ajoutez le code ci-dessous.Réglage
self.frame.size.height
à "un nombre raisonnable" évite quelques bugs lors de l'utilisation deFLT_MAX
,CGFloat.greatestFiniteMagnitude
ou en grand nombre. Les bugs se produire en cours de fonctionnement lorsque l'utilisateur de sélectionner les points saillants du texte dans le champ, il peut faire glisser faites défiler vers le haut et vers le bas, vers l'infini. De plus, lorsque l'utilisateur saisit du texte leNSTextField
est masquée jusqu'à ce que l'utilisateur termine le montage. Enfin, si l'utilisateur a sélectionné leNSTextField
et tente alors de redimensionner la fenêtre, si la valeur deself.frame.size.height
est trop grand la fenêtre se bloque.