mx:TextArea的旧方法已不再适用。具体来说:
myMxTextArea.verticalScrollPosition = myMxTextArea.maxVerticalScrollPosition;
我找到了这个Spark的方法,但似乎有些笨拙:
mySparkTA.scrollToRange(mySparkTA.text.length-1, mySparkTA.text.length);
有没有更简单的方法来做这件事?
mx:TextArea的旧方法已不再适用。具体来说:
myMxTextArea.verticalScrollPosition = myMxTextArea.maxVerticalScrollPosition;
我找到了这个Spark的方法,但似乎有些笨拙:
mySparkTA.scrollToRange(mySparkTA.text.length-1, mySparkTA.text.length);
<s:TextArea id="ta" width="100%" height="100%" />
ta.scroller.verticalScrollBar.value = ta.scroller.verticalScrollBar.maximum;
<s:Scroller id="scroller">
<s:TextArea id="ta" width="100%" height="100%" />
</s:Scroller>
那么在AS中完成这个操作:
scroller.verticalScrollBar.value = scroller.verticalScrollBar.maximum;
没有其他更加简单的方法来完成它。
<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事件的监听器。这可能会妨碍某些人的输入,但对于此用例可能效果良好。