4

我得到了一个非常动态的 textField(html 文本),我必须调整框的大小来修复它并计算占用的空间。我正在使用...

myTextField.height = myTextField.textHeight;

但是结果不是很精确,甚至 Adob​​e 的描述都说不是。有更好的方法吗?这个类有一些“自动调整大小”的适当性吗?最后:如果这个“textHeight”不提供真实的文本高度,它的目的是什么?

4

4 回答 4

7

TextField 类有一个返回TextLineMetrics的getLineMetrics()方法。

两页都有很好的例子。

您可以使用numLines()方法获取多行文本字段中的文本行数。

在此处输入图像描述

于 2013-06-05T00:25:05.310 回答
3

做这个:

myTextField.autoSize = TextFieldAutoSize.LEFT;
// if it should not be singleline then add this aswell
myTextField.wordWrap = true;
myTextField.multiline = true;

至于你的第二个问题:
textHeight以像素为单位返回文本的高度。
检查文档中的示例 - > AS3 Docs TextField.textHeight

于 2013-06-05T00:25:12.050 回答
2

textHeight如果您定义宽度,则返回正确的值。我还添加了 4-6 的边距,具体取决于文本字段的文本格式,以确保显示我的所有文本。虽然它有点古怪,但动态 TF 也没有让我失望,但我只使用了text属性,而不是htmlText. 关于自动调整大小 -textHeight用于此目的,但文本字段没有实际的自动调整大小。

于 2013-06-05T04:07:10.773 回答
1

如果您想要更精确的内容,我通过查看docs和 this tip找到了解决方案。

以下两项对我来说都非常适合单行、多行自动换行(仅文本换行和 \n)和多行无自动换行(仅 \n)。

简短的假设版本(不要使用这个):

var totalLines = textField.bottomScrollV - textField.scrollV + textField.maxScrollV;
var metrics    = textField.getLineMetrics(0);
var gutter     = 2;
var actualHeight = (metrics.ascent + metrics.descent) * totalLines + (totalLines - 1) * metrics.leading + 2 * gutter;

更长更好的版本,其中行具有不同的指标(使用此):

var gutter  = 2;
var totalLines = textField.bottomScrollV - textField.scrollV + textField.maxScrollV;

var actualHeight = 0;
var prevLeading = 0;
for (var i = 0; i < totalLines; i += 1)
{
    var metrics = textField.getLineMetrics(i);
    actualHeight += metrics.ascent + metrics.descent + prevLeading;
    prevLeading = metrics.leading;
}
actualHeight += 2 * gutter;

对于带有内联图像的单行测试,其中 textField 高度给我 32,textHeight 给我 39,计算的高度(上面的实际高度)为 34。对于高度为 97.20 的多行测试,textHeight 为 23.79,actualHeight 为 97.15。这个实际高度包括两边的排水沟,但如果有的话,会去掉尾随前导。

于 2016-10-13T18:05:45.937 回答