maxScrollV报告错误

时间:2010-12-09 10:01:18

标签: flash actionscript-3

我有一个html文本字段,用于显示xml文件中的内容,以及一个确定是否显示滚动条的类。

确定这一点的代码与

一样简单
if (field.maxScrollV>1){
  showscrollbars()
}

十分之九有效。有时 - 似乎当html包含<li>时 - maxScrollV报告'2'并且滚动条正在显示,即使所有文本都在屏幕上可见,它实际上根本不会滚动。

即使我强制更大的文本字段:field.height + = 100,它仍会报告maxScrollV = 2并显示滚动条。

想法?

3 个答案:

答案 0 :(得分:0)

你自己说过,如果maxScrollV是2那么条形图会显示出来,所以问题是为什么有时这会发生? 对于在enterframe上进行测试的等式中的延迟不断设置滚动条(显然在生产中没有好处!!!)然后看看它是否有效。

这意味着它不是一个延迟问题(任何时候你得到9次中有10次延迟通常是问题,因为当事情没有发生时它是不确定的)

也尝试在线,这应该会让它变得更糟!

答案 1 :(得分:0)

如果我添加一个小的定时器延迟,它将正确报告该值。我想这意味着我需要看作addedToStage事件?

答案 2 :(得分:0)

此代码可用于将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”,此值将自行更正,因此如果您只设置text = "",则numLines是正确的。在任何情况下,textHeight + leading是一个很好的“真实”值,用于文本的高度,并且一如既往“文本字段所需的高度以避免滚动”应为“真实文本高度”+4。