チャットが追加されるたびに、私はずっとこの例のように、Flexコンテナを最後の位置までスクロールさせるにはどうすればよいですか?
http://demo.seanhess.net/oneshots/scrolling.swf
をチャットウィンドウを作成しています、私はそれが完全に最後のメッセージを表示したいです。 maxVerticalScrollPositionを使用してリストのスクロール位置を設定していますが、それは常に間違っています(例を参照)。それは1行ほどそれをundershoots。私はこれを通常のコンテナで試しましたが、同じことをします。 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()よりも優先しています。なぜなら、あなたはコントロールしており、アクションが今行われていることを知っているからです。 –