【问题标题】:How do you set the proper width of a dynamic UITextField before assigning text?在分配文本之前如何设置动态 UITextField 的正确宽度?
【发布时间】:2009-02-17 20:56:24
【问题描述】:

在 Flex 3.2 中,我正在创建一个 UITextField,然后测量我将要分配给该字段的文本属性的文本。然后我使用这些指标来设置字段的大小。但是,计算出的宽度不足以容纳文本。是否有不同的顺序来实现正确的测量,或者我看到 measureText() 函数有问题?如何获得准确的结果?

// UITextField's default size appears to be 100x100
// Measure the text then set width and height
var tf:UITextFormat = uiTextField.getUITextFormat();
var tlm:TextLineMetrics = tf.measureText(this.labelText);

// Text within the field is clipped unless 'padding' is added to the size
// Flex Documentation specifies there is a 2 px gutter on each side, so
// the expected padding would be 4 px.  However, clipping occurs, for 
// "Hello, World" up to 9 px.
uiTextField.width = tlm.width + 9; 
uiTextField.height = tlm.height + 4;
uiTextField.border = true;
uiTextField.name = "uiTextField";               
uiTextField.text = this.labelText;

【问题讨论】:

    标签: apache-flex actionscript-3 actionscript flex3


    【解决方案1】:

    我之前在测量 textField 的宽度和高度时遇到了各种各样的麻烦。看起来您只想自动调整文本字段的大小。你试过了吗:

    uiTextField.autoSize = TextFieldAutoSize.LEFT;
    

    ???

    【讨论】:

    • 谢谢,无需进行某些测量即可停止剪辑,以后我可以使用 uiTextField 的宽度来适当地绘制和放置图形。我将不回答这个问题,因为 measureText() 的不准确宽度仍然困扰着我。
    【解决方案2】:

    不幸的是,Flex 在尝试动态获取 textWidth 时经常会感到非常困惑。更糟糕的是,很难可靠地捕获错误并让 Flex 正确更新自身。我发现的最佳选择:

    1. 手动破解它 - 主要是可靠的,并且有利于在一切完成渲染之前发生: mx.controls.Text hack AS3 描述了一种方法来做到这一点。
    2. 使用 callLater 或 FlexEvent.CREATION_COMPLETE 事件侦听器 - 这不太可靠,但绝对不是 hack
    3. 使用 setTimeout 的延迟小于每秒 1/10(我喜欢 25-50 毫秒)——我发现这是最可靠的,但它可能会导致屏幕上出现一个小“闪烁”(通常不是很严重短代码很明显)。

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 2011-11-26
      • 2017-02-23
      • 2013-06-23
      • 1970-01-01
      相关资源
      最近更新 更多