Basé sur How to let NSTextField grow with the text in auto layout?
également de taille ne contraintes définies pas, il suffit que ce soit.
La méthode intrinsicContentSize
de NSView
renvoie ce que la vue elle-même considère comme sa taille de contenu intrinsèque.
NSTextField
calcule ceci sans tenir compte de la propriété wraps
de sa cellule, donc il rapportera les dimensions du texte s'il est présenté sur une seule ligne.
Par conséquent, une sous-classe personnalisée de NSTokenField
peut remplacer cette méthode pour retourner une meilleure valeur, tel que celui fourni par cellSizeForBounds:
procédé de la cellule:
-(NSSize)intrinsicContentSize
{
if (![self.cell wraps]) {
return [super intrinsicContentSize];
}
NSRect frame = [self frame];
CGFloat width = frame.size.width;
// Make the frame very high, while keeping the width
frame.size.height = CGFLOAT_MAX;
// Calculate new height within the frame
// with practically infinite height.
CGFloat height = [self.cell cellSizeForBounds: frame].height;
return NSMakeSize(width, height);
}
pas tout à fait, le cellSizeForBounds retourne toujours la même taille dans tokenfield ... aussi vous devez écouter sur textDidChange et invalidateIntrinsicContentSi ze –
@PeterLapisu cellSizeForBounds ne retourne pas toujours la même taille, au moins sur 10.11. J'ai posté une réponse avec le code complet. – rdougan