Мое приложение состоит из NSScrollView
, чье представление документа содержит ряд вертикально расположенных NSTextViews
, размер каждого из которых изменяется в вертикальном направлении по мере добавления текста.
В настоящее время все это управляется в коде. Размер NSTextViews
изменяется автоматически, но я наблюдаю за изменением их размера с помощью NSViewFrameDidChangeNotification
, пересчитываю все их начальные значения, чтобы они не перекрывались, и изменяю размер их суперпредставления (представления документа прокрутки )так, чтобы все они соответствовали и можно прокручивать до.
Кажется, это идеальный кандидат для автомакета! Я установил NSLayoutConstraints
между первым текстовым представлением и его контейнером, последним текстовым представлением и его контейнером,и каждый текстовый вид между собой. Затем, если какое-либо текстовое представление увеличивается, оно автоматически «опускает» источники текстовых представлений под ним, чтобы удовлетворить ограничения, в конечном итоге увеличивая размер представления документа, и все счастливы!
За исключением того, что нет способа заставить NSTextView
автоматически увеличиваться по мере добавления текста в макет на основе ограничений -? Используя тот же самый NSTextView
, который автоматически расширялся по мере ввода текста ранее, если я не укажу ограничение для его высоты, он по умолчанию равен 0 и не отображается. Если я укажу ограничение, даже такое неравенство, как >=20, оно останется на этом размере и не будет увеличиваться по мере добавления текста.
Я подозреваю, что это связано с реализацией NSTextView -intrinsicContentSize
, которая по умолчанию возвращает (NSViewNoInstrinsicMetric, NSViewNoInstrinsicMetric)
.
Итак, мои вопросы :, если я создам подклассы NSTextView
, чтобы вернуть более значимый intrinsicContentSize
на основе макета моего текста, будет ли мой автомакет работать так, как ожидалось?
Любые указатели на реализацию intrinsicContentSize
для вертикального изменения размера NSTextView?