Работа с автоматическим добавлением полос прокрутки - PullRequest
0 голосов
/ 03 сентября 2010

У меня такая проблема: я создаю контейнер и его содержимое во время выполнения. Вот грубая структура:

- VBox

---- Форма

------- FormItem

...

------- FormItem

---- ControlBar

Я установил maxHeights для контейнера form, чтобы он оставался в пределах экрана. Но когда я получаю вертикальную полосу прокрутки, также появляется горизонталь (кажется, что для этого VScrollBar недостаточно места).

Чтобы избежать этой проблемы, я создал прослушиватель для появления горизонтальной прокрутки, поэтому, если он появится, я немного увеличу контейнер, поэтому он будет нормально работать на другой полосе прокрутки:

form.addEventListener(Event.ADDED, function(event:Event):void{
if(event.target is HScrollBar){
    while(form.horizontalScrollBar && form.horizontalScrollBar.visible && !(form.width > form.maxWidth)){
        form.width += 10;
        form.validateDisplayList();
    }
}
});

Я пробовал также validateNow и другие подобные методы. Что у меня здесь: 1. HScrollBar добавляется. 2. Увеличим немного ширину контейнера, чтобы он исчез. 3. Когда он исчезает, проверка выдает исключение нулевого указателя, когда пытается измерить несуществующую полосу прокрутки. Я также пытался добавить validateProperties до проверки, но это тоже не сработало.

Может кто-нибудь помочь избавиться от этого надоедливого свитка? :)

1 Ответ

0 голосов
/ 03 сентября 2010

Проблема в том, что если для scrollPolicy установлено значение auto Flex не учитывает размеры прокрутки при расчете макета. Поэтому, когда появляется прокрутка, она отображается поверх контента, который там уже есть. А когда содержимое скрыто с помощью прокрутки, появляется горизонтальная прокрутка, поэтому весь контент можно получить с помощью прокрутки. Я обычно имею дело с тем, чтобы всегда устанавливать paddingRight (или right, когда parent равен Canvas), свойство стиля равно 20 (обычная ширина прокрутки - 16), поэтому при появлении прокрутки ничего не перекрывается.

...