Flex 3 - получить фактический размер компонента - PullRequest
0 голосов
/ 19 января 2011

Я хотел бы получить фактическую высоту компонента после добавления некоторых дочерних элементов.

При проверке вкладки переменных в режиме отладки я вижу 2 разные переменные высоты: $ height (который содержит правильное значение: 138) и height / _height (который содержит неправильное значение: 10).

Я предполагаю, что отображение не обновляется, и поэтому я не получаю правильную высоту, используя component.height, но как я могу получить значение в $ height?

Спасибо за любую помощь, которую вы можете оказать =)

С уважением, BS_C3


@ Flextras

Опять же, большое спасибо за ваш ответ! Это было действительно подробно =)

Измеренная высота не дает мне значение, которое я ищу, а явная высота не имеет значения (NaN). Я не могу проверить прямо сейчас, поэтому я не могу сказать для немасштабируемой высоты ...

Вот структура того, что у меня есть:

MainContainer - Canvas
    BOX1 - Canvas (height = 100)
    BOX2 - Canvas (height = 100)
    VariableBox - Canvas (height: depends on the height of it's variable number of children)
    Text - TextArea

Мне нужна высота VariableBox для позиционирования текста.

Функция выглядит так:

updateDisplay(){
    for(i;i<list.length;i++){
        VariableBox.addChild(new HBox);
    }
    // reposition Text depending on VariableBox's height
}

Я знаю, что не даю никакого кода, но сейчас я не на своем рабочем компьютере> _ <</p>

Надеюсь, это поможет !!

Ответы [ 2 ]

5 голосов
/ 19 января 2011

Краткий ответ: используйте методы getMeasuredOrExplicitWidth () и getMeasuredOrExplicitHeight () .

Во многих случаях высота или ширина будет возвращать те же значения, что и эти методы.

Более длинный ответ: Какой компонент вы используете? Поскольку вы пометили это Flex, я собираюсь предположить, что это визуальный компонент Flex, который расширяет UIComponent.

У вас есть несколько различных значений высоты, на которые следует обратить внимание, но имейте в виду, что родитель всегда обязан определять размер своих детей. Добавление дочерних элементов в компонент не обязательно изменит его высоту или ширину. Зависит от того, учитывает ли компонент, к которому вы добавляете детей, дочерние элементы.

Сначала взглянем на Измеренная высота и Измеренная ширина . Это предпочтительные значения размера компонента, рассчитанные с использованием метода меры. Некоторые компоненты, такие как HBox или VBox, автоматически «узнают» о своих дочерних элементах и ​​будут использовать их при расчете своего размера. Другие компоненты, такие как UIComponent, не учитывают дочерние элементы при настройке measureHeight или measureWidth.

Во-вторых, вы можете взглянуть на ОчевидныеВысокие и ОчевидныеШирота. Если вы установите высоту или ширину, то эти значения будут установлены. Я не верю, что эти значения установлены, если вы используете метод setActualSize (). Под капотом есть какая-то магия, так что ОчевидныйВысота и Очевидный Ширина маскируются за высотой и шириной. Они часто одинаковы, но не всегда.

Обычно я не имею дело с масштабированием, но если вам нужна немасштабированная высота и ширина компонента, есть защищенные свойства компонента unscaledWidth и unscaledHeight . Я считаю, что это те значения, которые передаются в метод updateDisplayList ().

Имейте в виду, что для изменения размера компонента после добавления или удаления дочерних элементов он должен пройти собственный жизненный цикл. Итак, этот код:

trace(container.width);
container.addChild(myChild);
trace(container.width);

Вероятно, не изменит ширину контейнера, поскольку у контейнера не было возможности запустить методы measure (), updateDisplayList () или commitProperties ().

Если это не поможет, вам нужно будет конкретизировать и предоставить код.

0 голосов
/ 21 января 2011

Окончательное решение:

Я наконец нашел какой-то обходной путь, который меня устраивает без каких-либо экстравагантных вещей ...

У меня был родительский контейнер, к которому я динамически добавлял несколько дочерних элементовего высота не обновлялась.Проблема, с которой я столкнулся, заключается в том, что ни measureHeight, ни visibleHeight, ни height, ни unscaledHeight родительского контейнера не давали мне нужную мне высоту, когда я этого хотел.каждый ребенок.После запуска события завершения создания учитывается каждый элемент управления дочерним элементом.В этот момент измеренная высота родительского контейнера установлена ​​в ожидаемое значение.Поэтому мне просто нужно было установить:

parentContainer.height = parentContainer.measuredHeight

Еще раз спасибо Flextras, который предоставил некоторую полезную информацию =)

С уважением.

...