(решение в Swift находится в конце поста)
Я перепробовал все эти методы, и ни один из них не работал для меня.«Официальный» путь (как упомянуто OP) большую часть времени был для моего NSTextField
.Переключение на NSTextView
было невозможно из-за сбоя XCode / IB всегда после добавления «NSTextView в NSScrollView».
Короче говоря, я нашел этот простой способ определить высотуmy NSTextField
, но это может быть очень легко адаптировано к ширине.
CGFloat minHeight = [((NSTextFieldCell *)[yourTextField cell]) cellSizeForBounds:NSMakeRect(0, 0, YOUR_MAX_WIDTH, FLT_MAX)].height;
Этот код работал для каждого отдельного теста, который не удался с другими методами.Я надеюсь, что это помогает кому-то.Я всегда чувствую себя чертовски глупо, когда беру 2 часа, чтобы найти решение, казалось бы, легкой проблемы.
МЕДЛЕННОЕ ИЗМЕНЕНИЕ : При ближайшем рассмотрении это работает, только если вы прочитаете stringValue
из NSTextField
, прежде чем я попрошу ячейку рассчитать ее высоту.Поэтому я добавил следующую бессмысленную строку перед фактическим расчетом:
[yourTextField setStringValue:yourTextField.stringValue];
Я знаю, что это действительно очень плохо, но на данный момент мне все равно,Я просто хочу надежное решение.Не стесняйтесь понизить меня или еще лучше : предложите лучшее решение.
Решение в Swift (спасибо iphaaw за то, что вы обратили на это мое внимание!)
myTextField.cell!.cellSizeForBounds(NSMakeRect(CGFloat(0.0), CGFloat(0.0), width, CGFloat(FLT_MAX))).height