【发布时间】:2011-05-06 20:43:16
【问题描述】:
我创建了一个动态文本字段,并将 autoSize 设置为 true,因此它可以根据需要增长。然后我想使用 _height 值来调整容器图形(语音气泡)的大小。
这是(简化的)代码:
var format:TextFormat = new TextFormat("Arial", 14);
format.color = 0x000000;
format.letterSpacing = -0.2;
var txt:TextField = _root.createTextField("dialog_txt", 150, 10, 10, 150, 0);
txt.multiline = true;
txt.wordWrap = true;
txt.autoSize = 'left';
txt.embedFonts = true;
txt.selectable = false;
txt.text = value;
txt.setTextFormat(format);
然后我尝试将容器的高度设置为文本字段的高度 + 5,但结果太短了。
container._height = txt._height + 5;
我发现通过在前面添加trace(txt._height),即使跟踪值太小,值也会正确显示。即使只是将 txt._height 分配给临时变量 (var junk=txt._height;) 也可以解决问题。用几个跟踪函数替换它:
trace(txt._height); //Note: No code between these two calls
trace(txt._height);
返回19.6,紧接着是35.2。好像读取txt._height会导致它重新计算,所以第二次是正确的。
我还尝试了textHeight 属性,它似乎在访问_height 后也会重新计算。这个序列,例如:
trace(txt.textHeight); // Returns 15
trace(txt.textHeight); // Returns 15
trace(txt._height); // Returns 19.6
trace(txt.textHeight); // Returns 31
trace(txt._height); // Returns 35.2
这是在 AS 2 中,由 MTASC 编译。
对这里发生的事情有什么想法吗?
【问题讨论】:
标签: flash actionscript textfield autosize