Использование Autolayout с расширением NSTextViews

Мое приложение состоит из NSScrollView, чье представление документа содержит ряд вертикально расположенных NSTextViews, размер каждого из которых изменяется в вертикальном направлении по мере добавления текста.

В настоящее время все это управляется в коде. Размер NSTextViewsизменяется автоматически, но я наблюдаю за изменением их размера с помощью NSViewFrameDidChangeNotification, пересчитываю все их начальные значения, чтобы они не перекрывались, и изменяю размер их суперпредставления (представления документа прокрутки )так, чтобы все они соответствовали и можно прокручивать до.

Кажется, это идеальный кандидат для автомакета! Я установил NSLayoutConstraintsмежду первым текстовым представлением и его контейнером, последним текстовым представлением и его контейнером,и каждый текстовый вид между собой. Затем, если какое-либо текстовое представление увеличивается, оно автоматически «опускает» источники текстовых представлений под ним, чтобы удовлетворить ограничения, в конечном итоге увеличивая размер представления документа, и все счастливы!

За исключением того, что нет способа заставить NSTextViewавтоматически увеличиваться по мере добавления текста в макет на основе ограничений -? Используя тот же самый NSTextView, который автоматически расширялся по мере ввода текста ранее, если я не укажу ограничение для его высоты, он по умолчанию равен 0 и не отображается. Если я укажу ограничение, даже такое неравенство, как >=20, оно останется на этом размере и не будет увеличиваться по мере добавления текста.

Я подозреваю, что это связано с реализацией NSTextView -intrinsicContentSize, которая по умолчанию возвращает (NSViewNoInstrinsicMetric, NSViewNoInstrinsicMetric).

Итак, мои вопросы :, если я создам подклассы NSTextView, чтобы вернуть более значимый intrinsicContentSizeна основе макета моего текста, будет ли мой автомакет работать так, как ожидалось?

Любые указатели на реализацию intrinsicContentSizeдля вертикального изменения размера NSTextView?

23
задан jemmons 28 June 2012 в 03:17
поделиться