3

<s:Scroller>コンポーネントを使用してオーバーフローしたコンテンツを垂直方向にスクロールするFlex4アプリケーションを構築しています。質問する前に何が起こるかを説明しましょう。

  1. ページの本文はデータベースからロードされます
  2. 情報が読み込まれると、アプリケーションの「本体」(この場合は以下に表示されるアイテムのリスト)が作成されます
  3. リストが作成されると、次のように、カプセル化コンポーネント全体がTweenMaxを使用してビューに移行されます。

    myComponent.visible = true;
    
    TweenMax.to(myComponent, 1, {
      alpha : 1,
      y -= 20 //Slides the component up 20px from its original location
    });
    

結果は以下のとおりです。スクロールバーが完全に下にスクロールされていることに注目してください。ただし、一番下で切り取られたいくつかの白い文字の先端を見ることができます。

カスタムメニューを使用して、ページから移動してページに戻ることができます。Flexはスクローラーの範囲を正しく再計算するため、下にスクロールして目的のコンテンツをすべて表示できます。この問題は、ユーザーが入力する最初のURLがこのような長いページである場合にのみ発生します。

Flexにスクローラーの範囲を再計算させる方法についてのアイデアはありますか?

お時間をいただきありがとうございます。

ここに画像の説明を入力してください

4

1 に答える 1

1

何時間にもわたって調査し、つなぎ合わせ、試行錯誤を繰り返した結果、私は思いついたのです。

私が間違っていたこと:

この質問を最初に投稿したとき、私が言及した「コンポーネント」は、の子要素としてすでに追加されていましたが<s:Scroller>、次のように折りたたまれて隠されていました。

<comp:MyComp alpha="0" height="0" visible="false"/>

データがロードされ、コンポーネントの外観が復元され、次のように所定の位置に遷移する場合。

myComp.visible = true;
myComp.height = NaN;
myComp.invalidateSize();
myComp.height = myComp.measuredHeight;

TweenMax.to(myComp, 1, {
  alpha : 1,
  y -= 20 //Slides the component up 20px from its original location
});

このアプローチの方法では、<s:Scroller>後でまで適切なサイズを再計算する必要はありませんでしmyCompた。同じ方法を使用して別のコンポーネントが所定の位置に移行されるまで、場合によっては再計算されませんでした。それでも、スクローラーのサイズは、現在表示されているコンポーネントではなく、前のコンポーネントのサイズに適合します。

今、私が正しく行っていること:

私の調査によると、メソッドが呼び出されると、それ自体addElement()の内部で直接、<s:Scroller>またはその子のいずれかによって、スクローラーのmeasure()メソッドが呼び出され、スクローラーのサイズが適切に変更されます。

コンポーネントをスクローラー内に配置し、必要になるまで単に非表示にする代わりに、ActionScriptでコンポーネントを動的に作成し、プロパティを設定し、必要に応じて、メソッドaddElement()removeElement()メソッドをそれぞれ使用してコンポーネントを追加および削除しました。これで、古い要素が移行され、新しい要素が代わりに使用されるため、スクローラーは自動的にサイズを変更します。

私が直面した最後の問題が1つありました。ユーザーが表示していた最初のページ(つまり、移行されて破棄された以前のコンポーネントがなかった場合)にスクローラーが必要な場合、そのページは表示されませんでした。

新しいコンポーネントの移行が完了したときにリッスンするイベントリスナーを追加することで、この最後の問題を修正しました。イベントハンドラー内で、次のコードを使用してコンポーネントの高さを明示的に設定します。

newComp.height = NaN;
newComp.invalidateSize();
newComp.height = newComp.measuredHeight;

コンポーネントに明示的な高さが設定されたため、最初のページであっても、スクローラーが表示されます。

スクローラーはすべての場合に期待どおりに機能するようになり、コンテンツが途切れたり、表示されるべきでないときに消えたりすることはありません。

お役に立てば幸いです。

于 2012-08-11T16:02:05.350 に答える