[flash]TextAreaのverticalScrollPolicy="auto" 設定時の挙動について
flashでTextAreaをverticalScrollPolicy="auto"で設定したときに行数がTextAreaの高さ以下であっても縦スクロールが表示されたままになるというので、ちょっと調べてみました。
結果
キーボードのBSキーやDeleteキーなどで文字を削除し、かつ削除操作後に表示文字列が変わらない場合(改行コードのみの削除など)にスクロールバーが表示されたままになりました。
ただし、その後文字入力をすれば縦スクロールは表示されなくなりました。
調べたこと
スクロールの表示・非表示については、ScrollControllBase#setScrollBarPropertiesメソッドが調整しています。
TextAreaからの流れは次のようになっていました。
TextAreaのtextField:IUITextFieldのChangeEventが発生
↓
TextArea#ajustScrollBars()
↓
ScrollControllBase#setScrollBarProperties
対応方法
textFieldにchangeイベントをdispatchすれば解決するし、setScrollBarPropertiesはprotectedなのでTextAreaを拡張すれば簡単に変更ができるのかなぁと思います。
ただ、面倒くさいと言われそうなので次のようにしてみました。
<mx:Script> <![CDATA[ import mx.core.ScrollPolicy; private function ajustVerticalScrollBar(e:KeyboardEvent):void { if(e.keyCode == 8 || e.keyCode == 46) { textArea.verticalScrollPolicy=ScrollPolicy.OFF; } textArea.verticalScrollPolicy=ScrollPolicy.AUTO; } ]]> </mx:Script> <mx:TextArea keyDown="ajustVerticalScrollBar(event)"/>
あんまり納得していないし、後で読む人はなんのことだかさっぱりな感じですがどうしようもなかったらこれでいいかなと
あと今回の場合に、IUITextFieldが本当にchangeイベント投げないのか調べてなかった…