Spark:Screollerを適切に機能していないリストの最後に自動的に設定します
-
04-10-2019 - |
質問
いくつかのデータのリストを表示するために、次のMXMLコードを使用しています。高さが可変できるカスタムレンダラーを作成しました。新しいデータが到着するたびに、スクロラーはリストの最後に移動する必要があります。配列の変更をトリガーするイベントに登録しました。
アイテムの高さが同じ場合、それは正常に動作しています。しかし、これが発生していない場合、スクロラーは最後を少し上回っています。
リストの中央からのアイテムの高さが大きい場合、最後のアイテムは表示されません。
この問題を解決するためのヒントを教えてもらえますか?
<s:Scroller width="100%" height="100%" id="scroller" horizontalScrollPolicy="off">
<s:DataGroup
id = "lstComments"
width = "100%"
height = "100%"
clipAndEnableScrolling = "true"
itemRenderer = "myCustomRenderer">
<s:layout>
<s:VerticalLayout
id = "vLayout"
useVirtualLayout = "true"
gap = "2"
variableRowHeight = "true"
horizontalAlign = "left"
verticalAlign = "top"
paddingTop = "0"
paddingBottom = "0" />
</s:layout>
</s:DataGroup>
</s:Scroller>
private function onArrayChange(event:CollectionEvent):void
{
switch(event.kind) {
case CollectionEventKind.ADD:
{
callLater(scrollDown);
break;
}
}
}
private function scrollDown():void
{
scroller.verticalScrollBar.value = scroller.viewport.contentHeight - scroller.viewport.height;
scroller.invalidateProperties();
}
解決
最後に、ハックを見つけました。問題はによって引き起こされました scroller.viewport.contentHeight
. 。メソッドの場合、正しく計算されませんでした scrollDown
と呼ばれていました。
だから、この問題を解決するために、私が作成した後 scroller
に登録しました FlexEvent.UPDATE_COMPLETE
イベント。
そして、このイベントを処理する方法:
private function onUpdateCompleteScroller(event:Event):void
{
//compute the new value for the scroller
var newValue:Number = scroller.viewport.contentHeight - scroller.viewport.height;
if (scroller.verticalScrollBar.value != newValue && newValue > 0)
{
scroller.verticalScrollBar.value = scroller.viewport.contentHeight - scroller.viewport.height;
scroller.invalidateProperties();
}
}
他の誰かがより良い解決策を見つけた場合、私は彼の答えを受け入れます。
所属していません StackOverflow