mx的旧方法:TextArea不再有效。具体做法是:
myMxTextArea.verticalScrollPosition = myMxTextArea.maxVerticalScrollPosition;
我已经为Spark发现了这种方法,但看起来有点笨拙:
mySparkTA.scrollToRange(mySparkTA.text.length-1, mySparkTA.text.length);
有更简单的方法吗?
答案 0 :(得分:6)
假设你有
<s:TextArea id="ta" width="100%" height="100%" />
以下内容可行:
ta.scroller.verticalScrollBar.value = ta.scroller.verticalScrollBar.maximum;
无需将TextArea包装在Scroller组件中。
答案 1 :(得分:3)
这就是你如何使用spark textarea,但是你总是可以尝试将它包装在一个Scroller组件中,而不是让textarea本身打扰滚动:
<s:Scroller id="scroller">
<s:TextArea id="ta" width="100%" height="100%" />
</s:Scroller>
然后在AS中执行此操作:
scroller.verticalScrollBar.value = scroller.verticalScrollBar.maximum;
没有其他 easy 方法可以做到。
答案 2 :(得分:2)
spark TextArea有一个&#34; appendText&#34;方法 这会将文本和卷轴自动附加到添加的行中。
答案 3 :(得分:0)
<s:TextArea id="consoleTextArea"
change="consoleTextArea_changeHandler(event)"
valueCommit="consoleTextArea_valueCommitHandler(event)"
updateComplete="scrollToTheBottom()"
/>
然后在ActionScript中:
protected function consoleTextArea_valueCommitHandler(event:FlexEvent):void {
scrollToTheBottom();
}
protected function consoleTextArea_changeHandler(event:TextOperationEvent):void {
scrollToTheBottom()
}
public function scrollToTheBottom():void {
var scrollBar:VScrollBar = consoleTextArea.scroller.verticalScrollBar;
scrollBar.value = scrollBar.maximum;
consoleTextArea.validateNow();
if (scrollBar.value != scrollBar.maximum) {
scrollBar.value = scrollBar.maximum;
consoleTextArea.validateNow();
}
}
您可能需要将if语句放在循环中几次迭代,或者直到值匹配或接近最大值。
更新:为updateComplete事件添加了侦听器。这可能会妨碍某人打字,但可能会对此用例有效。