Apache flex 如何让Flex容器滚动到最后一个位置?
我正在创建一个聊天窗口,很像这个例子 每当添加聊天时,我希望它完全显示最后一条消息。我使用maxVerticalScrollPosition设置列表上的滚动位置,但它总是错误的,请参见示例。它比它低一排左右。我用一个普通的容器试过,它也有同样的效果。如果我使用maxVerticalScrollPosition+1,它可以正常工作,但是如果最后一条消息特别长,它将被截断,只显示顶部 如何让它滚动到容器的实际底部Apache flex 如何让Flex容器滚动到最后一个位置?,apache-flex,Apache Flex,我正在创建一个聊天窗口,很像这个例子 每当添加聊天时,我希望它完全显示最后一条消息。我使用maxVerticalScrollPosition设置列表上的滚动位置,但它总是错误的,请参见示例。它比它低一排左右。我用一个普通的容器试过,它也有同样的效果。如果我使用maxVerticalScrollPosition+1,它可以正常工作,但是如果最后一条消息特别长,它将被截断,只显示顶部 如何让它滚动到容器的实际底部 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
protected function addChat():void
{
collection.addItem(new String(input.text));
list.verticalScrollPosition = list.maxVerticalScrollPosition;
input.text = "";
}
]]>
</mx:Script>
<mx:Panel width="400" height="290">
<mx:List id="list" width="100%" height="100%" variableRowHeight="true">
<mx:dataProvider>
<mx:ArrayCollection id="collection"/>
</mx:dataProvider>
<mx:itemRenderer>
<mx:Component>
<mx:Text text="{data}"/>
</mx:Component>
</mx:itemRenderer>
</mx:List>
<mx:HBox width="100%">
<mx:TextInput id="input" width="100%" enter="addChat()"/>
<mx:Button label="add" click="addChat()"/>
</mx:HBox>
</mx:Panel>
</mx:Application>
将addChat分为两个功能,addChat和addChatScrollToEnd。在addChat中添加聊天项目,然后调用LaterAddChatScrollToEnd,它将显示滚动行
或者,您也可以调用list.validateNow,但出于性能原因,不建议使用它。这应该适合您
<mx:Script>
<![CDATA[
protected function addChat():void
{
collection.addItem(new String(input.text));
callLater(function() {
list.verticalScrollPosition = list.maxVerticalScrollPosition;
});
input.text = "";
}
]]>
</mx:Script>
我在非平凡的应用程序中大量使用validateNow,没有性能问题。如果它在一个巨大的循环中启动,我会避免它,但在这个场景中,建议使用validateNow。我更喜欢它,而不是稍后打电话,因为你在控制中,知道行动正在发生。