如何让Flex容器滚动到最后位置?

时间:2009-08-12 14:55:35

标签: 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>

2 个答案:

答案 0 :(得分:0)

将addChat()分成两个函数:addChat()和addChatScrollToEnd()。在addChat()中添加聊天项,然后在具有滚动行的callLater(addChatScrollToEnd)中添加。

或者你可以调用list.validateNow()但不建议出于性能原因。

答案 1 :(得分:0)

这应该适合你。

    <mx:Script>
            <![CDATA[
                    protected function addChat():void
                    {
                            collection.addItem(new String(input.text));
                            callLater(function() {
                                    list.verticalScrollPosition = list.maxVerticalScrollPosition;
                            });
                            input.text = "";
                    }
            ]]>
    </mx:Script>