Заставьте intrinsicContentSize адаптироваться к внешним ограничениям - PullRequest
0 голосов
/ 05 мая 2018

Контекст

У меня часто бывают ситуации, когда мне нужно несколько NSTextView с в одном NSStackView. Естественно, Auto Layout это не устраивает, так как это делает высоту неоднозначной (при условии, что представление стека не настроено для одинакового заполнения). Даже после добавления ограничений для решения этих проблем в MacOS Interface Builder появляется ошибка, из-за которой он фактически отказывается обновлять кадры.

По этой и другим причинам я пытаюсь создать класс TextBox (подкласс NSView), чтобы инкапсулировать NSTextView (и связанный вид прокрутки) и включить внутренний размер контента, чтобы избежать проблем с макетом. Внутренний размер контента будет рассчитываться на основе заданного пользователем минимального и максимального количества строк (для отображения без необходимости прокрутки). Другими словами, до определенного максимального числа строк TextBox изменит свой размер, так что прокрутка не нужна.

Проблема

Это может потребовать intrinsicContentSize, которое зависит от ширины кадра.

Но, intrinsicContentSize документация заявляет :

Внутренний размер, который вы указываете, должен быть независимым от фрейма контента, потому что невозможно динамически передать измененную ширину в систему макетов на основе измененной высоты.

Однако в Руководстве по автоматической компоновке говорится :

Размер внутреннего содержимого текстового представления варьируется в зависимости от содержимого, от того, включена ли прокрутка или нет, и от других ограничений, применяемых к представлению. Например, при включенной прокрутке представление не имеет внутреннего размера контента. Если прокрутка отключена, по умолчанию размер внутреннего содержимого представления вычисляется на основе размера текста без переноса строк. Например, если в тексте нет возвратов, он вычисляет высоту и ширину, необходимые для размещения содержимого в виде одной строки текста. Если вы добавите ограничения для указания ширины представления, размер внутреннего содержимого определяет высоту, необходимую для отображения текста с учетом его ширины.

Учитывая, что при просмотре текста отключена прокрутка:

Если вы добавите ограничения для указания ширины представления, размер внутреннего содержимого определяет высоту, необходимую для отображения текста с учетом его ширины.

Тогда кажется, что есть способ сделать то, что я хочу, возможно, посмотрев на существующие ограничения.

Вопрос

Как определить внутренний размер контента, который вычисляет высоту на основе указанной ширины, как описано в последнем приведенном выше предложении?

Решение должно создавать эффект, описанный в «Контексте», и не создавать ошибок или предупреждений при использовании в представлении стека.

...