当前位置:文档之家› Flex中滚动条无法自动定位到组件底部的问题

Flex中滚动条无法自动定位到组件底部的问题

在做聊天室群聊窗口文字消息添加的时候,发现一个奇怪的问题,滚动条总是不能到达底部。上网搜了搜,终于发现了问题的所在。

当为一个容器添加一个child的时候,很容易想到的做法是:

vbox.verticalScrollPosition = vbox.maxVerticalScrollPositon;

但是,这是不完全正确的。这种做法是在childAdd事件触发的时候来设置verticalScrollPosition,但是使用这种方法,得到的效果总是滚动条离最下方有一段距离。其实,当childAdd事件触发的时候,像vbox这些container并没有开始重新改变自己的尺寸。此时返回的maxVerticalScrollPosition不是最新的,而是上一次的。这时候需要使用callLater方法,就可以得到准确的maxVerticalScrollPosition。

下面是一个例子:










import mx.controls.Button;

import mx.events.ChildExistenceChangedEvent;



private function addAButton(): void

{

var newButton:Button = new Button();

https://www.doczj.com/doc/e913560799.html,bel = "new button" ;

vbox2.addChild(newButton);

}



private function onAdd(event:Event):void{

callLater(focusNewRow);

}



private function childAddHandler(event:ChildExistenceChangedEvent): void

{

callLater(focusNewRow);

}



public function focusNewRow():void {

vbox2.verticalScrollPosition = vbox2.maxVerticalScrollPosition;

};



]]>








childAdd="childAddHandler(event)" added="onAdd(event)">


















除了在一个container里自动滚动,还有一个问题就是如何在一个TextArea里随着文字的动态变化,将滚动条自动定位到TextArea的底部。很容易想到的就是在TextArea的“change”事件中设置verticalScrollPosition。但是,这样依旧行不通,你需要使用valueCommit事件。当TextArea得尺寸发生变化时,这个事件比change事件触发的要晚。示例代码如下:






















相关主题
文本预览
相关文档 最新文档