Flex: запретить отображение полосы прокрутки при ее отображении автоматически

У меня есть холст в Flex, который можно прокручивать только в вертикальном направлении, поэтому я устанавливаю атрибуты холста следующим образом:

verticalScrollPolicy="auto" horizontalScrollPolicy="off"

Проблема заключается в том, что вертикальная полоса прокрутки покрывает содержимое, когда оно появляется - хотя есть достаточно горизонтальной комнаты слева. Я бы предположил, что размер содержимого будет автоматически изменен.

При настройке политики вертикальной прокрутки на "on" содержимое не распространяется также.

В случае, если для обеих политик прокрутки задано значение "авто", я также получаю горизонтальную полосу прокрутки только для прокрутки к области, которая покрыта вертикальной полосой прокрутки.

Существует ли способ обхода содержимого холста, когда отображается вертикальная полоса прокрутки, чтобы он не охватывал какой-либо контент?

Ответ 2

Просто примечание к этой проблеме: на самом деле это не ошибка, а известное (и предполагаемое?) поведение:

"Flex считает полосы прокрутки в расчетах размеров только в том случае, если вы явно задайте политику прокрутки ScrollPolicy.ON. Итак, если вы используете автоматической прокрутки (по умолчанию), Полоса прокрутки перекрывает кнопки. к предотвратите это поведение, вы можете установить height свойство контейнера HBox или разрешить размер контейнера HBox путем установки процентной ширины. Помните, что изменение высоты контейнер HBox вызывает другие компонентов в вашем приложении для перемещения и изменять размеры в соответствии с их собственными правила калибровки."

- Из Размерные компоненты в справке Flex 3 в разделе "Использование полос прокрутки"

Ответ 4

на vbox или другом компоненте на основе контейнера, я решил эту проблему.

Неправильно:

<mx:VBox width="100%" height="100%"
      verticalScrollPolicy="auto" horizontalScrollPolicy="off">
     <mx:Repeater dataProvider="{hede}">
          <custom:RenderItem ........../>
     </mx:Repeater>
</mx:VBox>

нет полосы прокрутки

Рабочая версия:

<mx:VBox width="100%" height="100%"
    **minHeight="1"** horizontalScrollPolicy="off">
    <mx:Repeater dataProvider="{hede}">
        <custom:RenderItem ........../>
    </mx:Repeater>
</mx:VBox>

Ответ 5

Я тоже. Обычно у меня возникают проблемы с verticalScrollBar в Flex, поэтому я предпочитаю использовать панель прокрутки браузера для прокрутки полного приложения. Вы можете найти обходное решение здесь: Как изменить размер этапа Flex и использовать панель прокрутки браузера.

Код, который я использую:

В Flex:

ExternalInterface.call("setInitialFlashHeight", this.height);

В моем HTML (JavaScript):

function setInitialFlashHeight(newHeight) {
    document.getElementById('my_flash').style.height = newHeight + 'px';
}

И если вы хотите добавить (или удалить) некоторую высоту:

function addFlashHeight(height) {
    var divHeight;
    var obj = document.getElementById('my_flash');

    if (obj.offsetHeight) {
        divHeight = obj.offsetHeight;
    } else if (obj.style.pixelHeight){
        divHeight = obj.style.pixelHeight;
    }

    var newHeight = divHeight + height;
    document.getElementById('my_flash').style.height = newHeight + 'px';
}

Чтобы удалить, вы используете "-" вместо "+".