Flex: Предотвратете лентата за превъртане да покрива съдържание, когато се показва автоматично

Имам платно във Flex, което ще може да се превърта само във вертикална посока, така че задавам атрибутите на платното, както следва:

verticalScrollPolicy="auto" horizontalScrollPolicy="off"

Проблемът тук е, че вертикалната лента за превъртане покрива съдържанието, когато се появи - въпреки че остава достатъчно хоризонтално място. Бих очаквал, че размерът на съдържанието ще бъде автоматично коригиран.

Когато зададете политиката за вертикално превъртане на „включено“, съдържанието също не се покрива.

В случай, че задам и двете правила за превъртане на „автоматично“, получавам също хоризонтална лента за превъртане само за превъртане до областта, която е покрита от вертикалната лента за превъртане.

Има ли заобиколно решение как мога да пренаредя съдържанието на платното, когато се показва вертикалната лента за превъртане, така че да не покрива съдържание?


person Yaba    schedule 15.11.2008    source източник


Отговори (5)


Това е бъг. Вижте Грешка във Flex verticalScrollPolicy за заобиколно решение.

person Scott Evernden    schedule 15.11.2008
comment
Чудесен. Боря се с това от векове - благодаря за указателя. - person Matt Dillard; 01.04.2009
comment
Това работи само когато платното има изрична височина. Ами ако има височина, базирана на проценти? - person bug-a-lot; 16.06.2009
comment
@bug-a-lot Току-що внедрих това за платно, което има процентна височина и работи перфектно. - person Herms; 21.04.2010
comment
Току-що забелязах, че това най-накрая е поправено във Flex 4. - person Yaba; 03.03.2011
comment
Това не работи за мен, когато промених размера на приложението след създаването. Поправих това, като извиках този код за настройка на политиката като част от събитието updateComplete. Може би обаче задаването му в updateDisplayList() override би било по-подходящо. - person Opux; 24.09.2014

Само странична бележка по отношение на този проблем: това всъщност не е грешка, а известно (и предвидено?) поведение:

"Flex взема под внимание лентите за превъртане в своите изчисления за оразмеряване само ако изрично зададете политиката за превъртане на ScrollPolicy.ON. Така че, ако използвате политика за автоматично превъртане (по подразбиране), лентата за превъртане припокрива бутоните. За да предотвратите това поведение, вие може да зададе свойството height за контейнера HBox или да позволи на контейнера HBox да преоразмерява, като зададе ширина, базирана на проценти. Не забравяйте, че промяната на височината на контейнера HBox кара други компоненти във вашето приложение да се местят и преоразмеряват според техните собствени правила за оразмеряване. "

-- От Оразмеряващи компоненти във Flex 3 помощ, под „Използване на ленти за превъртане“

person hasseg    schedule 16.11.2008
comment
Тогава все още е бъг. Зададох въз основа на процент на височина и ширина. И все пак не преоразмерява съдържанието, когато се показва лентата за превъртане. - person Yaba; 17.11.2008
comment
Начинът, по който разбирам този откъс е, че чрез задаване на ширината на процентна стойност и не изобщо задаване на височина, самият компонент ще преоразмерява, когато се покаже лентата за превъртане, а не съдържанието. Това все пак може да не се отнася за вашата конкретна ситуация. - person hasseg; 18.11.2008

Трябваше да намеря това решение Flex ScrollPolicy.AUTO Not Good Enough, което реши този проблем, тъй като заобиколното решение на бъга във Flex verticalScrollPolicy не работи за мен.

person tuiz    schedule 25.02.2011

на 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>
person Dogus ATASOY    schedule 18.08.2011

И аз също. Обикновено имам някои проблеми с verticalScrollBar във Flex, така че предпочитам да използвам лентата за превъртане на браузъра за превъртане на цялото приложение. Можете да намерите заобиколно решение тук: Как да преоразмерите Flex Stage и да използвате лентата за превъртане на браузъра.

Кодът, който използвам:

Във 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';
}

За да премахнете, използвайте "-" вместо "+".

person LE GALL Benoît    schedule 16.03.2010