У меня есть текстовое поле с заданной высотой и шириной, которое позволяет переносить слова. Когда я добавляю в него текст, я динамически изменяю размер шрифта до тех пор, пока высота текста не станет меньше высоты поля, что позволит ему правильно вписаться. Проблема, с которой я сталкиваюсь, заключается в том, что поле достаточно тонкое по необходимости, и некоторые более длинные слова (например, «Австралия») разбиваются во время переноса слов. Так что, возможно, «Australi» появится в первой строке, а «a» - во второй. Однако, поскольку они удовлетворяют требованию высоты, они больше не уменьшаются. Мне нужен способ обнаружить это и продолжать сокращать эти случаи, чтобы они соответствовали без перерыва. Вот код для динамического сжатия текста, чтобы соответствовать высоте:
text.wordWrap = true;
text.autoSize = TextFieldAutoSize.CENTER;
while(text.height > textBoxVal) {
myFormat.size = Number(myFormat.size) - 2;
text.defaultTextFormat = myFormat;
text.setTextFormat(myFormat);
}
Это отлично работает. Проблема с моим подходом к следующему шагу (сокращение, если горизонтальные ограничения не выполняются из-за разделения слова) состоит в том, что если оставить значение text.wordWrap
равным true, более длинные слова будут по-прежнему разрываться и никогда не будут изменены, но при установке этого значения false означает, что другие поля, которые раньше были хорошими из-за включения переноса слов (например, «Соединенные Штаты»), теперь слишком длинные в одной строке и сокращаются, когда этого не должно быть. Для чего это стоит, вот мой код, чтобы сжать горизонтально (сразу следует за кодом выше):
text.wordWrap = false;
text.autoSize = TextFieldAutoSize.LEFT;
while(text.width > textBoxVal) {
myFormat.size = Number(myFormat.size) - 2;
text.defaultTextFormat = myFormat;
text.setTextFormat(myFormat);
}
Есть ли лучший способ сделать это? Возможно, какой-нибудь способ заставить ActionScript не прерывать слова и т. Д.
Редактировать: Чтобы привести пример, посмотрите на скриншот ниже:
При этом используется только первый кодовый блок, который обеспечивает соответствие текста вертикальным ограничениям блока. Вы можете видеть, что некоторые блоки (например, первые для США) хороши, тогда как некоторые из более мелких (например, последние несколько) разделены. Использование моего второго блока кода для изменения размера горизонтальных ограничений не вносит изменений, если перенос по словам истинен, и сделает все поля (включая те, которые хороши, как в США) меньше, чем необходимо, если перенос по словам установлен в ложь.