maxScrollV неправильно сообщает - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть текстовое поле html, которое отображает содержимое из файла xml, и класс, который определяет, следует ли отображать полосу прокрутки.

Код, который определяет это так же просто, как и

if (field.maxScrollV>1){
  showscrollbars()
}

И 9 раз из десяти работает. Иногда - кажется, что html содержит <li> - maxScrollV сообщает '2', и полосы прокрутки отображаются, даже если весь текст виден на экране и фактически не прокручивается вообще.

Даже если я увеличу текстовое поле: field.height + = 100, оно все равно сообщит maxScrollV = 2 и покажет полосы прокрутки.

Идеи

Ответы [ 3 ]

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

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

0 голосов
/ 12 августа 2013

Этот код можно использовать для изменения размера TextField, чтобы он был достаточно большим, чтобы вместить текст без прокрутки.

var metrics:TextLineMetrics = getLineMetrics( numLines - 1 ); //get metrics of last line of text
var minimum_height = metrics.height + metrics.leading; //include one extra leading in all textHeight measurements to avoid undercalculating the textHeight (maxScrollV seems to use a value for textHeight that includes an extra leading value)
var real_textHeight:Number = textHeight + metrics.leading;  //include one extra leading in all textHeight measurements to avoid undercalculating the textHeight (maxScrollV seems to use a value for textHeight that includes an extra leading value)
var gutter:Number = 4; //2px top and 2px bottom gutter exists on all textfields
height = (h < minimum_height) ? (minimum_height + gutter) : (real_textHeight + gutter); //match height of text, ensuring height is at least enough to display one line, even if there is no text.  also accounts for 4 pixel gutter and extra leading value that would otherwise throw off maxScrollV

В вашем случае вы не пытаетесь изменить размер textField, но в принципе, чтобы определить, следует ли отображать полосы прокрутки, вы хотели бы использовать:

var needsScrollBars:Boolean = ((textfield.textHeight + metrics.leading) > (height + 4));

Ключ заключается в том, чтобы включить это дополнительное начальное значение, которое не включено в свойство textHeight, но, похоже, учитывается maxScrollV. Проблема, когда maxScrollV слишком много, исчезает, если ведущий равен нулю.

Если ваша проблема заключается в задержке обновления полей, убедитесь, что вы устанавливаете свойство text в последнюю очередь. Если вы выполняете автоматическое изменение размера, вы можете либо изменить высоту, а затем сбросить textfield.text или вызвать либо textfield.getCharBoundaries, либо textfield.getLineMetrics, что, по-видимому, заставляет его обновить свои внутренние значения.

Наконец, еще одна проблема, которую я заметил, заключается в том, что numLines изначально неправильный. Например, пустое текстовое поле на сцене сообщит о numLines = 2. Как только «текст» будет установлен во время выполнения, это значение будет исправлено, поэтому, если вы просто установите text = "", тогда numLines будет правильным. В любом случае textHeight + lead - это хорошее «реальное» значение, используемое для высоты текста, и, как всегда, «требуемая высота текстового поля, чтобы избежать прокрутки», должно быть «реальной высотой текста» + 4.

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

Вы сказали это сами, если maxScrollV равен 2, тогда отображаются столбцы, поэтому возникает вопрос, почему иногда это происходит?Возьмите задержку из уравнения для теста на энтерфрейме, постоянно устанавливайте полосу прокрутки (очевидно, не годится для производства !!!), затем посмотрите, работает ли она.

Это будет означать, что это не проблема задержки (в любое время, когда вызадержка в 9 раз из 10 часто является проблемой, так как она неопределенная, когда что-то не происходит)

также попробуйте онлайн, что должно ухудшить ситуацию!

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