Определение ширины текста в UITextField - PullRequest
0 голосов
/ 29 ноября 2010

У меня проблемы с поиском ширины строки текста в объекте UITextField. Я знаю, что существуют различные методы, документированные, чтобы якобы сделать это, но они просто не работают. Существует один и только один метод, который выдает правильное значение, но требует использования свойства textField объекта mx.controls.Text. Если этот textField используется, тогда getCharBoundaries работает правильно, и вы можете просто сложить возвращенную ширину из серии обращений к нему, чтобы получить ширину строки текста.

Однако, если вы просто вызываете getCharBoundaries для отдельного TextField или UITextField (то есть того, который не является свойством MX: Text), тогда getCharBoundaries возвращает какое-то совершенно другое значение, которое существенно меньше, чем если бы оно вызывалось для свойства textField объекта Mx: текстовый объект. На самом деле это примерно на 25% меньше, чем правильное значение, но это даже не соответствует, потому что изменение размера шрифта и расхождение, кажется, изменяются нелинейно. Так что getCharBoundaries на самом деле возвращает в случае автономного UITextField, я понятия не имею.

Но на самом деле, вызовите любой другой метод для определения ширины текста TextField (кроме getCharBoundaries в объекте MX: Text), и вы получите то же ошибочное значение: TextField.getUITextFormat (). MeasureHTMLText (... ) .width (или measureText) и TextField.getLineMetrics (...). width - все возвращают одно и то же ошибочное значение. И вы можете сказать: «Ну, они, вероятно, просто возвращают ширину от левого крайнего пикселя в тексте до крайнего правого пикселя», за исключением того, что, как я уже сказал, в одном случае getCharBoundaries фактически возвращает полную ширину ячейки текста, это то, что я хочу (и затем при вызове из отдельного текстового поля какое-то совершенно другое значение.)

Но моя проблема впервые появилась, когда я попытался изменить объект MX: Text (внутри которого я мог успешно вызвать getCharBoundaries) на UITextField. Так что теперь ни getCharBoundaries, ни что-либо еще работает правильно для определения ширины текста. (Примечание: я на самом деле не отображаю поле UIText, а скорее использую его для обработки текста за кулисами, поскольку он значительно быстрее, чем MX: Text. Я устанавливаю значение UITextField.htmlText, а затем выполняю серию вызовов getTextFormat, setTextFormat и replaceText. И все это работает как и раньше с объектом Mx: Text, за исключением гораздо более быстрого. Единственная проблема заключается в том, что теперь, по-видимому, нет способа определить ширину текста для строки текста, хотя Adobe документирует все эти методы, которые должны это делать.

И вот мой вопрос: я захожу на Google, и комментариев к этому очень мало, и вообще нет никакого обходного пути, которое я видел где-либо задокументировано. Я видел одну ветку на actionscript.org пару лет назад, где кто-то еще сказал, что все эти методы ширины просто не работают. Это было подтверждено кем-то, но никакого решения не предоставлено. (Примечание: на этом плакате отмечалось, что ошибка, по-видимому, возрастала с увеличением размера шрифта и была не столь заметна при малых размерах шрифта, что, как я полагаю, может объяснить, почему она не была замечена.)

Но я скачал здесь Flex 4 некоторое время назад, и проблема все еще там. Так что просто интересно, действительно ли я единственный человек, который осведомлен об этом, или столкнулся с этим, или, возможно, кто-то указал, что я скучаю. Я предполагаю, что система отслеживания Flex Bug была бы для меня вариантом, но, вероятно, это будет Black Hole.

Так или иначе, просто интересно, кто-нибудь сталкивался с этим или нашел работу вокруг.

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

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

Проблема была довольно неясной и почти наверняка не относящейся к другим, но вот она:

Я пытался найти ширину текста префикса, содержащего некоторые символы, в специальном нестандартном служебном шрифте, который я создал с очень нестандартными атрибутами. Mx: Text.textfield.getCharBoundaries не было проблем с этим, но любой другой метод ширины, очевидно, имел. Конечно, Mx.Text.textField на самом деле не TextField или UITextField, а скорее IUITextField, то есть он просто реализует интерфейс. Очевидно, что его реализация может не иметь ничего общего с реализацией TextField и UITextField, которые оба имеют прямое отношение.

Что касается этого нестандартного шрифта, у меня не было никаких проблем с ним в прошлом, поэтому я не смог идентифицировать его как виновника. Его ширина символов идентична ширине шрифта другого, что решает мою проблему.

0 голосов
/ 01 декабря 2010

Я должен предоставить обновление здесь. Проблема была не в том шрифте, который я использовал, а в том, что это был не системный шрифт Windows. measureText, measureHTMLText и т. д. не будет работать, если шрифт не установлен в собственной системе пользователя ранее. Не имеет значения, если шрифт встроен в приложение Flex, конечный пользователь должен уже установить этот шрифт в своей собственной системе для работы этих методов ширины. MX: Text.textField.getCharBoundaries - единственный, которому все равно, является ли он системным шрифтом. (UITextField.getCharBoundaries также требует, чтобы это был системный шрифт.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...