2010-12-09 66 views
2

我有一个HTML文本字段,显示来自xml文件的内容以及决定是否显示滚动条的类。maxScrollV报告不正确

确定此是那样简单

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

和9超时10是工作的代码。有时候 - 当html包含<li> - maxScrollV正在报告'2'并显示滚动条时,即使所有文本在屏幕上都可见,但它实际上不会滚动。

即使我强制textfield变大:field.height + = 100它仍然报告maxScrollV = 2并显示滚动条。

想法?

回答

0

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

0

你自己说过,如果maxScrollV是2然后酒吧显示,所以问题是为什么有时会发生这种情况? 为了在enterframe上进行测试,将等待时间设置为不变(在生产中显然没有好处),然后查看它是否有效。

这将意味着它不是一个延迟问题(任何时候你得到9倍10潜伏期往往是问题,因为它的不确定性发生时未启用的东西)

网上也应该使情况变得更糟试试吧!

+1

是啊,问题是“为什么maxScrollV在不滚动的字段上报告2” – Andrew 2010-12-09 10:21:21

+0

当高度发生变化时,它可能不会立即重新计算这些维度,尽管我认为它在文本更改时会这样做,所以您想要改变最后。或者,如果您调用textfield.getCharBoundaries或textfield.getLineMetrics,它似乎更新它的值。 – Triynko 2013-08-12 16:29:30

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 

在你的情况,你是不是要调整文本框,但原则上,以确定是否显示滚动条,你想使用:

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

的关键是以包含该额外的领先值,这不包含在textHeight属性中,但似乎被maxScrollV考虑在内。如果前导为零,那么maxScrollV太多的问题就会消失。

如果您的问题是更新字段中的延迟,请确保最后设置“文本”属性。如果您正在执行自动调整大小,则可以更改高度,然后重置textfield.text或调用textfield.getCharBoundaries或textfield.getLineMetrics,这似乎迫使它更新其内部值。

最后,我注意到的另一个问题是numLines最初是错误的。例如,舞台上的空白文本字段将报告numLines = 2.一旦在运行时设置了“文本”,该值就会自行修正,所以如果您只设置了text = "",则numLines是正确的。在任何情况下,textHeight + leading对于文本的高度都是一个很好的“真实”值,并且始终“为了避免滚动而需要的文本字段高度”应该是“真实文本高度”+ 4.