我想创建一个文本字段扩展:设置宽度时,根据文本内容自动调整高度。通过 autosize left、word wrap true、multiline true 轻松完成。设置高度时,根据文本内容自动调整宽度。这是我的问题。
当宽度和高度都不是我感兴趣的情况时。
我在网上尝试了几件事,我很难过。
我想创建一个文本字段扩展:设置宽度时,根据文本内容自动调整高度。通过 autosize left、word wrap true、multiline true 轻松完成。设置高度时,根据文本内容自动调整宽度。这是我的问题。
当宽度和高度都不是我感兴趣的情况时。
我在网上尝试了几件事,我很难过。
不是最优雅的解决方案,但它应该可以工作:
function setHeight(newHeight:Number):void {
myTextField.height = newHeight;
while(myTextField.textHeight > myTextField.height) {
myTextField.width += 100;
}
}
一般的解决方案是不可能的,好像文本字段包含太多换行符而无法在给定高度内显示,无论您分配什么宽度,文本字段都将无法显示所有行。Greetification 提供了部分解决方案,但它缺少一些应该注意的功能。首先,无论你做什么,你都不应该将高度设置为小于字体高度的值,否则文本字段将无法显示单行。其次,如果wordWrap
设置为 false 和multiline
true,则结果textWidth
是您的文本字段的最大理想宽度,因此,如果您像 greetification 建议的那样调整宽度,则在达到记录后停止textWidth
,因为进一步增加是没有意义的。
function setHeight(newHeight:Number):void {
var tw:Number;
var th:Number;
if (myTextField.wordwrap) {
myTextField.wordwrap=false;
tw=myTextField.textWidth;
th=myTextField.textHeight;
myTextField.wordwrap=true;
} else {
tw=myTextField.textWidth;
th=myTextField.textHeight;
}
if (newHeight<th) newHeight=th+2; // as below
myTextField.height = newHeight;
while((myTextField.textHeight > myTextField.height)&&(myTextField.width<tw)) {
myTextField.width += 100;
}
if (myTextField.width>tw) myTextField.width=tw+2; // "2" depends on text format
// and other properties, so either play with it or assume a number big enough
}