Почему NSTextField с параметром ИспользованияSingleLineMode, установленным в YES, имеет собственный размер содержимого многострочного текста? - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу нарисовать однострочное текстовое поле с рамкой по умолчанию.

Поэтому я ввел в него несколько многострочных текстов (только для проверки на будущие случаи) и установил флаги

Swift:

textfield.usesSingleLineMode = true
textfield.maximumNumberOfLines = 1

Объектив-C:

self.textfield.usesSingleLineMode = YES;
self.textfield.maximumNumberOfLines = 1;

Но я попал в консоль:

(lldb) po self.textfield.intrinsicContentSize
(width = 511.5, height = 174)

enter image description here

Я протестировал все lineBreakMode с, включая NSLineBreakByTruncatingTail .enter image description here

Вот поле в IB: enter image description here

Конечно, я могу:

  • Перегрузка intrinsicContentSize метод
  • Фильтровать строки, сохраняя только первую строку

Но это похоже на костыль = (У вас есть идеи, как это исправить без костылей?? Как вы думаете, это ошибка AppKit или моя ошибка?

PS В любом случае, спасибо за внимание.

1 Ответ

0 голосов
/ 09 февраля 2019

Это не ошибка.По умолчанию NSTextField пытается отобразить как можно больше текста.Я сделал пример приложения, которое содержит длинную строку текста в заголовке NSTextField.Установите для этого параметра «Использование однолинейного режима» и установите разрыв строки на «Усеченный хвост».Я поместил ведущие, верхние и конечные ограничения макета на представление.Теперь, когда я ввожу текст в текстовое поле, горизонтальная ширина окна будет очень широкой.Это Autolayout в действии.

Truncated text field in single line mode

Чтобы исправить это, вам нужно выбрать NSTextField, выбрать инспектор размера и установить приоритет устойчивости сжатия сжатого содержимого по горизонтали:меньшее число.В примере приложения я изменил его с 750 на низкое (250).

Size inspector

Измените представление содержимого до приемлемого размера, и вы перейдете красы.

...