flex 无法定位到软件包_Flex中滚动条无法自动定位到组件底部的问题

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

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

vbox.verticalScrollPosition = vbox.maxVerticalScrollPositon;

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

下面是一个例子:

&lt?xml version="1.0" encoding="utf-8"?&gt

&ltmx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&gt

&ltmx:Script&gt

&lt![CDATA[

import mx.controls.Button;

import mx.events.ChildExistenceChangedEvent;

private function addAButton(): void

{

var newButton:Button = new Button();

newButton.label = "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;

};

]]&gt

&lt/mx:Script&gt

&ltmx:Text width="400" fontWeight="bold" text="Scroll in A Container Use Case: Click on the Button to continue adding children to the container and watch the scrollbar. It will always scroll to the bottom of the container." /&gt

&ltmx:VBox id="vbox2" borderThickness="2" borderStyle="solid" height="120" width="240"

childAdd="childAddHandler(event)" added="onAdd(event)"&gt

&ltmx:Button label="hello"/&gt

&lt/mx:VBox&gt

&ltmx:Button label="click me to add a button" click="addAButton()" /&gt

&lt/mx:Application&gt

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

&lt?xml version="1.0" encoding="utf-8"?&gt

&ltmx:Application xmlns:mx="http://www.ado

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值