У меня есть NSTextField с установленными левыми, правыми и верхними ограничениями (без ограничения нижнего предела). Мне нужно, чтобы NSTextField увеличивался, если содержимое не может вместить его и уменьшить размер, если осталось неиспользованное пространство.NSTextField, изменяемый по размеру
Теперь у меня: NSTextField автоматически расширяется со странным поведением, если у него многострочный текст или слишком много контента, также NSTextField не уменьшает собственный размер при изменении размера окна.
Я не нашел простого решения, написанного на Swift, чтобы решить эту проблему (у меня много таких ярлыков с ограничениями), в iOS все работало с обычными текстовыми метками и ограничениями.
Я создал простой проект для этого вопроса, который вы можете увидеть проблему: [Download Text.zip]
Растворы я нашел, но не использовали:
Вы может попытаться рассчитать возможную высоту TextField и установить для нее ограничение высоты. Проблемы этого решения:
- Возможные расчеты высоты неточны, иногда вы вычисляете неправильную высоту.
- Решения написаны на Objective-C с некоторым сложным кодом.
Запустите .sizeToFit() для каждого изменения размера окна или изменения текста. Он не работает, потому что .sizeToFit() всегда сжимает весь текст в одну строку.
Используйте NSTextView вместо NSTextField. Это хороший способ, но:
- Мне не нужна прокрутка, редактирование и другие функции NSTextView. Я не хочу вызывать сложный компонент для простой метки.
- NSTextView всегда требует ограничения по высоте или дну, я не знаю нижнего ограничения, потому что содержимое может расширяться с помощью нового текста.
- Я не нашел полное решение, чтобы сделать поведение NSTextView как я хочу :)
Отключить первую ширину макета выполнения и играть с этим TextField.needsLayout = true textField.needsUpdateConstraints = true textField.needsDisplay = true. Я не знаю, как принудительно обновить представление, а затем изменить масштаб NSWindow. Поэтому, когда вы вызываете addText, представление не расширяется. Но он будет правильно перерисовывать по размеру окна. –
@ xhruso00, если я отключу первый макет времени выполнения. NSTextField всегда отображается как 1 строка. needsLayout, needsUpdateConstraints, needsDisplay не имеет никакого эффекта вообще (на моих тестах). – Vasily
Вы изменили размер окна после нажатия кнопки? Только тогда представление освежает. Если вы решите перерисовать, он будет вести себя так, как вам угодно, без кода. –