setActualSize () является одним из наиболее важных и интересных методов в процессе макета Flex:
1) Обратите внимание, что setActualSize () является точкой входа для макета родителя для установки размера компонента, и он должен вызываться родительским (контейнером) почти исключительно!
Это связано с тем, что только родитель знает объем доступного пространства для каждого дочернего элемента (этот метод вызывается после того, как все дочерние элементы измерены, а контейнер знает свой собственный заданный размер).
(примечание: пример того, как не вызывать его по схеме, опубликованной ниже)
Этот метод существует, потому что если родительский объект установит «ширину» и «высоту» непосредственно для дочерних элементов, они немедленно превратятся в дочерние элементы фиксированного размера и больше не будут измеряться.
Используя этот метод, изменяется только размер рендеринга - не (явные) ширина и высота, а _width и _height - это означает, что если по какой-то причине размер контейнера снова изменится, дочерние элементы будут изменены по заданным правилам (процент от parent, расширение до размера дочернего компонента и т. д.)
2) Да, потому что, если этот метод вообще не вызывается, размер компонента (рендеринга) равен (0, 0), поэтому это является причиной его невидимости (не устанавливая 'visible' в false) ! ^ _ ^
Обратите внимание, что ДОЛЖЕН БЫТЬ ПЛАН (даже непривлекательный) для запуска этого вызова метода. Под «непривлекательным» я понимаю макет, который не должен делать ничего умного, например, ИЗМЕНИТЬ ШИРИНУ И ВЫСОТУ детей (например, абсолютный макет)!
Теперь рассмотрим метод addPopUp () класса PopUpManagerImpl: есть интересный случай вызова setActualSize ():
IUIComponent(window).setActualSize(
IUIComponent(window).getExplicitOrMeasuredWidth(),
IUIComponent(window).getExplicitOrMeasuredHeight());
Объяснение: PopUpManager делает то, что обычно должен делать макет, потому что он ХОЧЕТ ЗНАТЬ ИЗМЕРЕНИЯ POPUP НЕМЕДЛЕННО, поэтому он может центрировать всплывающее окно на сцене. Нет времени ждать проход макета!
Если вы прокомментируете эти 3 строки в коде фреймворка, вы увидите, что всплывающее окно центрируется по левому верхнему углу - точно так же, как его размер (0, 0). В любом случае, он отображается с правильной шириной и высотой, потому что во время визуализации размеры известны.
Надеюсь, это прояснит ситуацию ...
Ура! ^ _ ^
Данко Козар