Гибкая динамическая высота формы - PullRequest
1 голос
/ 17 марта 2010

Я не уверен, если это возможно, есть ли способ заставить <mx:Form> установить свою собственную высоту, основанную на положении элемента внутри него?

Например, что-то вроде этого:

<mx:Form height="{submitBtn.y + submitBtn.height}">

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>... </mx:FormItem>

   <mx:FormItem>
       <s:Button id="submitBtn" label="Submit" /> 
   </mx:FormItem>

</mx:Form>

, где форма height устанавливается динамически на основе позиции y submitBtn и ее высоты.

Я пытался использовать Alert.show, чтобы показать эти значения, и оказалось, что submitBtn.y = 0 и submitBtn.height = 21. высота звучит разумно, но я знаю, что submitBtn.y не может быть 0, поскольку он ниже нескольких других

Можно ли динамически устанавливать высоту формы?

Ответы [ 4 ]

2 голосов
/ 17 марта 2010

Да. Сделайте это в методе измерения:

private var n:Number = 0;
override protected function measure() : void {
super.measure();
    if (submitBtn) {
        var fi:FormItem = FormItem(submitBtn.parent);
        n = fi.y + fi.height;
    }
}

Затем просто установите высоту n .

Редактировать: я изменил это, чтобы указать содержащий FormItem, а не кнопку, что я и протестировал в своем собственном примере кода в первую очередь. Вы можете либо получить родителя кнопки, либо присвоить этому FormItem идентификатор. Но этот способ работает.

0 голосов
/ 06 мая 2010

Я надеюсь, что поток не закрыт, потому что у меня была такая же проблема, как у вас, и я нашел правильное решение, поэтому я постараюсь объяснить.

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

Я добавляю их в стек просмотра следующим образом:

<mx:ViewStack id="viewStack" resizeToContent="true">
</mx:ViewStack>

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

Как вы можете заметить, у стека просмотра есть свойство resizeToContent , что когда я выбираю элемент из сетки данных, стека просмотра изменяет selectedIndex (указывая другую форму) и автоматически изменяет его размер , изменяя размер к новому содержанию.

Если по какой-либо причине вам нужна высота формы, вы можете использовать вместо measure () свойство measureHeight .

Я добавлю код, используемый для понимания:

onCreationComplete(){
    ...
    for each (var form:Form in DataModel.getForms())
    {
        viewStack.addChild(form);
    }
    ...
}
0 голосов
/ 18 марта 2010

проверить метод localToGlobal (), доступный для всех дочерних элементов DisplayObject. Он преобразует ваши координаты x, y в глобальные x, y. Вы должны быть в состоянии использовать это в своих расчетах.

0 голосов
/ 17 марта 2010

ваш submitBtn.y всегда будет возвращать 0, поскольку это позиция y внутри элемента mx: FormItem (например, относительная позиция y)

Так что, как я полагаю, вы хотите установить позицию y формы на основе позиции y кнопки внутри формы. зачем тебе это?

...