Контекст
У меня часто бывают ситуации, когда мне нужно несколько NSTextView
с в одном NSStackView
. Естественно, Auto Layout это не устраивает, так как это делает высоту неоднозначной (при условии, что представление стека не настроено для одинакового заполнения). Даже после добавления ограничений для решения этих проблем в MacOS Interface Builder появляется ошибка, из-за которой он фактически отказывается обновлять кадры.
По этой и другим причинам я пытаюсь создать класс TextBox
(подкласс NSView
), чтобы инкапсулировать NSTextView
(и связанный вид прокрутки) и включить внутренний размер контента, чтобы избежать проблем с макетом. Внутренний размер контента будет рассчитываться на основе заданного пользователем минимального и максимального количества строк (для отображения без необходимости прокрутки). Другими словами, до определенного максимального числа строк TextBox
изменит свой размер, так что прокрутка не нужна.
Проблема
Это может потребовать intrinsicContentSize
, которое зависит от ширины кадра.
Но, intrinsicContentSize
документация заявляет :
Внутренний размер, который вы указываете, должен быть независимым от фрейма контента, потому что невозможно динамически передать измененную ширину в систему макетов на основе измененной высоты.
Однако в Руководстве по автоматической компоновке говорится :
Размер внутреннего содержимого текстового представления варьируется в зависимости от содержимого, от того, включена ли прокрутка или нет, и от других ограничений, применяемых к представлению. Например, при включенной прокрутке представление не имеет внутреннего размера контента. Если прокрутка отключена, по умолчанию размер внутреннего содержимого представления вычисляется на основе размера текста без переноса строк. Например, если в тексте нет возвратов, он вычисляет высоту и ширину, необходимые для размещения содержимого в виде одной строки текста. Если вы добавите ограничения для указания ширины представления, размер внутреннего содержимого определяет высоту, необходимую для отображения текста с учетом его ширины.
Учитывая, что при просмотре текста отключена прокрутка:
Если вы добавите ограничения для указания ширины представления, размер внутреннего содержимого определяет высоту, необходимую для отображения текста с учетом его ширины.
Тогда кажется, что есть способ сделать то, что я хочу, возможно, посмотрев на существующие ограничения.
Вопрос
Как определить внутренний размер контента, который вычисляет высоту на основе указанной ширины, как описано в последнем приведенном выше предложении?
Решение должно создавать эффект, описанный в «Контексте», и не создавать ошибок или предупреждений при использовании в представлении стека.