Как заставить NSStackView усекать самый правый NSTextField
У меня есть одна строка в моем пользовательском интерфейсе, которая состоит из строки фиксированного размера (FS), изображения фиксированного размера и строки переменного размера (VS). Мне нужно, чтобы эта строка была центрирована в ее суперпредставлении, возможно, обрезая VS, если он больше не вписывается. Так же, как это делает простой центрированный NSTextField с включенным усечением. Но NSTextField не может содержать NSImage AFAIK.
Я полагаю, что NSStackView должен быть в состоянии сделать это. Я настроил его так, чтобы он был в центре его суперпредставления и имел внутри NSTextField, NSImage и NSTextField. Но когда я устанавливаю VS на что-то очень длинное, FS и VS выталкиваются за пределы суперпредставления и обрезаются.
Есть ли способ сказать NSStackView никогда не перемещать FS за пределы суперпредставления и скорее урезать VS? Или есть какая-то другая техника для достижения моей цели?
Что я уже пробовал:
- Используйте NSStackView и установите значение responseResistance равным 499 для VS - безрезультатно
Использовать NSTextView - не удалось обрезать текст и уместить в одну строку. Также кажется излишним
Используйте NSView - он требует, чтобы я установил x-position, чтобы он не был правильно отцентрирован.
Я мог бы использовать NSView и рассчитать размеры строк и изменить ограничения, чтобы это работало. Но я думаю, что должен быть лучший путь.
Спасибо за любые идеи,
J.
1 ответ
Похоже, вы не ограничивали представление стека в его контейнере. В дополнение к ограничению на центрирование, вам нужно установить, чтобы его начальное значение было больше или равно начальному значению суперпредставления, а его конечное значение меньше или равно конечному значению его суперпредставления.
Сопротивление сжатию FS и вида изображения должно быть выше, чем сопротивление сжатию VS, и даже может потребоваться для предотвращения сжатия этих двух файлов.
Горизонтальное сопротивление отсечению стека должно быть выше, чем сопротивление сжатию VS. Это нормально, чтобы оставить его в обязательном порядке. Вы хотите, чтобы VS был сжат, а не обрезан.
Какое сопротивление VS должно быть на самом деле, зависит от остальной иерархии вашего представления и ограничений. Предположительно, оно должно быть меньше 490 (NSLayoutPriorityDragThatCannotResizeWindow
) так что это не заставляет окно изменять размеры.