Отсечение и динамическое изменение размера - PullRequest
0 голосов
/ 24 августа 2011

У меня есть контейнер с вертикальной компоновкой, внутри которого у меня есть два других дочерних контейнера «A» и «B».

В первом контейнере «A» есть компонент, размер которого я хотел бы динамически изменять в зависимости от доступного размера дисплея.
К этому я попытался прослушать событие изменения размера основного контейнера и сделать свои меры соответственно.
Это работает до тех пор, пока родительский контейнер не достигнет размера отсечения: контейнер «B» будет отсечен раньше, чем «A», потому что он содержит гораздо больше содержимого:
Как только родительский контейнер достигает размера отсечения «B», он больше не меняет размер (так что больше не изменяет размер события), что не позволяет мне обновить отображение моего компонента в «A».

Любые указания будут высоко оценены. Спасибо

1 Ответ

0 голосов
/ 24 августа 2011

У вас есть что-то вроде этого (поправьте меня, если я ошибаюсь):

<mx:VBox>
    <mx:VBox id="A" width="100%" height="100%">
        <CustomComponent id="component" width="100%" height="100%"/>
    </mx:VBox>
    <mx:VBox id="B"/>
</mx:VBox>

Вам не нужно слушать события изменения размера, контейнеры Flex могут изменять размер автоматически.Поведение макета изменения размера достигается назначением правильного размера в процентах для контейнера A и вашего компонента.Здесь у вас есть контейнер A, который занимает все свободное пространство, предоставленное его родительским контейнером top.Поэтому ваш внутренний компонент занимает все свободное пространство, предоставленное его родительским компонентом A. Когда размер верхнего контейнера изменяется, его дочерние элементы автоматически изменяют размер сами.

В чистом ActionScript соответствующие свойства равны percentHeight и percentWidth.

UPD

1) Проблема с размером B решается добавлением minWidth="10" (или 0, или минимального размера, который вы хотите).Это вынуждает B изменять размер с родительским контейнером, даже если в родительском контейнере недостаточно места.

2) Если вы хотите создать другой макет в пользовательском компоненте или выполнить некоторые вычисления на основе размера нового компонента, вы должны переопределить функцию "updateDisplayeList" в вашем пользовательском компоненте:

override protected function updateDisplayList(unscaledHeight:Number, unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);

    // your calculations
}

Эта функция вызывается Flex layoutManager, когда компонент должен обновить свой размер и / или дочерние позиции.Аргументы представляют доступное пространство для компонента.

Подробнее о жизненном цикле компонента Flex:

3) Какой-то оффтоп.

У меня такое чувство, что у вас просто есть VBox из Labels, и эти Labels не хотят изменять размер с его родителем,Эта проблема решается путем присвоения небольшого значения меткам minWidth - после этого Labels будет правильно обрезаться, если они превышают родительский размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...