основе How to let NSTextField grow with the text in auto layout?
Также не устанавливают контрсилами размера, только пусть это будет.
Метод intrinsicContentSize
в NSView
возвращает то, что сам взгляд считает его внутренним размером содержимого.
NSTextField
рассчитывает это без учета свойства wraps
его ячейки, поэтому он будет сообщать размеры текста, если он выложен на одной строке.
Следовательно, пользовательский подкласс NSTokenField
может переопределить этот метод, чтобы вернуть лучшее значение, например, от предусмотренного метода клетки cellSizeForBounds:
:
-(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);
}
не совсем, то cellSizeForBounds всегда возвращает один и тот же размер в tokenfield ... и вы должны слушать на textDidChange и invalidateIntrinsicContentSi ze –
@PeterLapisu cellSizeForBounds не всегда возвращает одинаковый размер, по крайней мере, 10.11. Я отправил ответ с полным кодом. – rdougan