我創建一個聊天窗口,就像這個例子如何讓Flex容器滾動到最後位置?
http://demo.seanhess.net/oneshots/scrolling.swf
每當新增聊天時,我希望它完全顯示的最後一條消息。我使用maxVerticalScrollPosition設置列表上的滾動位置,但始終是錯誤的(請參閱示例)。它連續排列在下面。我已經用普通的容器試過了,它也做了同樣的事情。如果我做maxVerticalScrollPosition + 1,它有點作用,但如果最後一條消息特別長,它會被截斷(只顯示頂部)。
我怎樣才能得到它滾動到實際容器的底部?
<?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>
我自由地使用validateNow()而不是在非平凡的應用程序中的性能問題。如果它在一個巨大的循環中發射,比我想避免它,但在這種情況下,建議使用validateNow()。我更喜歡它通過callLater(),因爲你在控制,並知道現在正在發生的行動。 – 2009-08-12 18:59:40