Spark:Screollerを適切に機能していないリストの最後に自動的に設定します

StackOverflow https://stackoverflow.com/questions/3761076

  •  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();
 }
}

他の誰かがより良い解決策を見つけた場合、私は彼の答えを受け入れます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top