如何设置多线wordWrap TextField以在设置高度时自动调整其宽度?

时间:2013-07-31 21:57:19

标签: actionscript-3 flash

我想创建一个文本字段扩展名: 设置宽度时,会根据文本内容自动调整高度。通过自动调整左边轻松完成,自动换行,多线真实。 设置高度时,会根据文本内容自动调整宽度。 这是我的问题。

当宽度和高度设置都不是我感兴趣的情况时。

我在互联网上尝试了几件事,我很难过。

2 个答案:

答案 0 :(得分:1)

不是最优雅的解决方案,但它应该有效:

function setHeight(newHeight:Number):void {
  myTextField.height = newHeight;

  while(myTextField.textHeight > myTextField.height) {
    myTextField.width += 100;
  }
}

答案 1 :(得分:1)

通用解决方案是不可能的,就好像文本字段包含太多要在给定高度内显示的换行符一样,无论您指定的宽度如何,文本字段都将无法显示所有行。部分解决方案是通过绿化提出的,但缺乏应该注意的一些功能。首先,无论您做什么,都不应将高度设置为小于字体高度的值,否则文本字段将无法显示单行。其次,如果wordWrap设置为false,multiline设置为true,则结果textWidth是文本字段所需的最大宽度,因此如果您调整宽度,请按照绿化建议,停止一旦达到记录的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
}