Как заставить NSStackView усекать самый правый NSTextField

У меня есть одна строка в моем пользовательском интерфейсе, которая состоит из строки фиксированного размера (FS), изображения фиксированного размера и строки переменного размера (VS). Мне нужно, чтобы эта строка была центрирована в ее суперпредставлении, возможно, обрезая VS, если он больше не вписывается. Так же, как это делает простой центрированный NSTextField с включенным усечением. Но NSTextField не может содержать NSImage AFAIK.

Я полагаю, что NSStackView должен быть в состоянии сделать это. Я настроил его так, чтобы он был в центре его суперпредставления и имел внутри NSTextField, NSImage и NSTextField. Но когда я устанавливаю VS на что-то очень длинное, FS и VS выталкиваются за пределы суперпредставления и обрезаются.

Есть ли способ сказать NSStackView никогда не перемещать FS за пределы суперпредставления и скорее урезать VS? Или есть какая-то другая техника для достижения моей цели?

Что я уже пробовал:

  1. Используйте NSStackView и установите значение responseResistance равным 499 для VS - безрезультатно
  2. Использовать NSTextView - не удалось обрезать текст и уместить в одну строку. Также кажется излишним

  3. Используйте NSView - он требует, чтобы я установил x-position, чтобы он не был правильно отцентрирован.

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

Спасибо за любые идеи,

J.

1 ответ

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

Сопротивление сжатию FS и вида изображения должно быть выше, чем сопротивление сжатию VS, и даже может потребоваться для предотвращения сжатия этих двух файлов.

Горизонтальное сопротивление отсечению стека должно быть выше, чем сопротивление сжатию VS. Это нормально, чтобы оставить его в обязательном порядке. Вы хотите, чтобы VS был сжат, а не обрезан.

Какое сопротивление VS должно быть на самом деле, зависит от остальной иерархии вашего представления и ограничений. Предположительно, оно должно быть меньше 490 (NSLayoutPriorityDragThatCannotResizeWindow) так что это не заставляет окно изменять размеры.

Другие вопросы по тегам