DClick

Tamanho de Container com Base nos Filhos


Twitter!

Quando criamos um Container no Flex e não especificamos seu tamanho, o tamanho será calculado com base nos filhos que são adicionados ao Container. Porém, caso você especifique um tamanho para ele, o tamanho passa a ser o que você especificou e, caso ele seja menor do que o tamanho dos filhos, o componente exibirá uma ScrollBar.

Mas e se você quiser que ele volta a calcular o tamanho para você? Existem alguns casos em que precisamos que isso seja feito, porém não podemos atribuir "null" ou -1 como valor na propriedade para que o Container volte ao comportamento inicial.

Conversando com o Beck Novaes a muito tempo atrás, ele me apontou uma solução para isso. Se vocês olharem no código de alguns componentes do Flex (como o Container ou o UIComponent), vocês encontrarão várias referências para a função isNaN() e, como muitos de vocês devem saber, NaN é o valor atribuído a variáveis numéricas quando não estão com algum valor numérico atribuído.


Portanto, para que o componente calcule o tamanho para você, faça o seguinte:

Actionscript:
  1. myContainer.height = NaN;


Um exemplo completo:

XML:
  1. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" height="100%" width="100%">
  2.  
  3.     <mx:Script>
  4.         <![CDATA[
  5.             private function sizeChanged():void
  6.             {
  7.                 if (group.selection == rbFixed)
  8.                 {
  9.                     myVBox.height = 100;
  10.                 }
  11.                 else
  12.                 {
  13.                     myVBox.height = NaN;
  14.                 }
  15.             }
  16.         ]]>
  17.     </mx:Script>
  18.  
  19.     <mx:HBox>
  20.         <mx:RadioButtonGroup id="group"
  21.             change="sizeChanged()"/>
  22.         <mx:RadioButton id="rbFixed" label="Fixed Size" selected="true"
  23.             group="{group}"/>
  24.         <mx:RadioButton id="rbAuto" label="Auto Size"
  25.             group="{group}"/>
  26.     </mx:HBox>
  27.  
  28.     <mx:VBox id="myVBox" height="100" width="150" backgroundColor="#FFFFFF" horizontalAlign="center">
  29.         <mx:Button label="Botão 1"/>
  30.         <mx:Button label="Botão 2"/>
  31.         <mx:Button label="Botão 3"/>
  32.         <mx:Button label="Botão 4"/>
  33.         <mx:Button label="Botão 5"/>
  34.     </mx:VBox>
  35.  
  36. </mx:Application>


Estranho, não? Seria esse mais um pattern do FreaktionScript?

Compartilhe:

  • RSS
  • Twitter
  • del.icio.us
  • Facebook
  • MySpace
  • LinkedIn
  • Google Bookmarks
Por André Gil em 11/January/2010 | Comentar | Trackback


No Translations

Adicionar comentário

(requerido)
(requerido, não será publicado)