2

TextArea選択したチャットルームからの会話を表示するがあります。私が使用するイベントの場合valueCommitverticalScrollPosition = maxVerticalScrollPosition;そして、テキストを一番下までスクロールしてうまく機能します。ただし、1つのケースでは、期待どおりに機能しません。テキストが非常に少ないので、TextAreaにはスクロールバーがなく、テキストをたくさん入れて、スクロールバーが必要になります。テキストはほぼ一番下までスクロールされます(それでも数行下にスクロールする必要があります)。maxVerticalScrollPositionスクロールバーがないかのように見えると確信しています。TextArea'sしたがって、問題は、新しいサイズ(現在はスクロールバーを使用)に関してverticalScrollPositionが更新されるのをどのように待つことができるかということです。validateSize'validate'で始まるメソッドを呼び出してみましたが、残念ながらうまくいきませんでした。また、テキストの最後にカレットを置くという古いトリックも試しました。だからTextArea'sスクロールバーは取得時に違いを生み、すべての測定が完了したらmaxVerticalScrollPosition更新する必要があります。verticalScrollPosition

言及するのを忘れました。私は使用しますhtmlText

4

2 に答える 2

1

あなたが受け入れた答えのコメントの中で、あなたはよりエレガントな解決策に言及しました。ええ、タイマーはおそらく最良のオプションではありません。ステージからコンポーネントを削除すると、eventListenerがクリーンアップされます。コンポーネントを複数回使用する場合は、別のタイマーインスタンスがあります。などなど。

コミット後のプロパティアクションがあまりない場合、最も迅速な解決策は、後でテキストまたはhtmlTextのセッターを呼び出すことです。

override public function set text(value:String):void
{
    super.text = value;

    callLater( scrollToEndAfterTextCommitted );
}

protected function scrollToEndAfterTextCommitted():void
{
    this.verticalScrollPosition = this.maxVerticalScrollPosition;
}

それがお役に立てば幸いです。頑張ってください!

于 2011-09-28T19:56:40.810 に答える
0

テキストを再度追加した後で問題が修正されたとすると、、Timerまたはを使用して、数分の1秒後に呼び出され、それで修正されるかどうかを確認できますsetTimeoutverticalScrollPosition = maxVerticalScrollPosition

于 2011-09-01T19:55:27.973 に答える