2

我有一个TextArea显示来自所选聊天室的对话。对于valueCommit我使用的事件:verticalScrollPosition = maxVerticalScrollPosition;它可以很好地将文本滚动到底部。但是,在一种情况下,它不能按预期工作。文本很少,所以 TextArea 没有滚动条,然后我放了很多文本,滚动条是必要的。文本几乎滚动到底部(仍然需要向下滚动几行)。我很确定它maxVerticalScrollPosition就像没有滚动条一样。所以问题是我如何等待更新verticalScrollPosition 的TextArea's新尺寸(现在是滚动条)。我尝试validateSize了以“验证”开头的调用和其他方法,但不幸的是没有运气。我还尝试了将插入符号放在文本末尾的旧技巧。所以TextArea's滚动条在获取时会有所不同,一旦完成所有测量maxVerticalScrollPosition,我需要更新。verticalScrollPosition

我忘了提。我用htmlText.

4

2 回答 2

1

在您接受的答案的评论中,您提到了一个更优雅的解决方案。是的,计时器可能不是最好的选择——如果你从舞台上移除组件,你就有了 eventListener 清理;如果您多次使用该组件,您将拥有另一个计时器实例;等等等等

如果您没有很多 post-commit-property 操作,最快的解决方案是稍后在 text 或 htmlText 的设置器上调用

override public function set text(value:String):void
{
    super.text = value;

    callLater( scrollToEndAfterTextCommitted );
}

protected function scrollToEndAfterTextCommitted():void
{
    this.verticalScrollPosition = this.maxVerticalScrollPosition;
}

我希望这会有所帮助。祝你好运!

于 2011-09-28T19:56:40.810 回答
0

假设在您再次添加其他文本后问题已得到解决,您可能可以通过使用Timer, 或调用setTimeout并在verticalScrollPosition = maxVerticalScrollPosition几分之一秒后调用并查看是否可以解决问题。

于 2011-09-01T19:55:27.973 回答