Pregunta

Cuando agrego un componente ComboBox en un Sprite, la altura del contenedor es más grande de lo que debería.

Esto es lo que quiero decir:

import fl.controls.ComboBox;
//add combo box inside a container sprite
var combo:ComboBox = new ComboBox();
var container:Sprite = new Sprite();
addChild(container);
container.addChild(combo);
//draw the outline of the container sprite
container.graphics.lineStyle(1,0x009900);
container.graphics.drawRect(0,0,container.width,container.height);
//I don't get this:
trace(combo.height);//outputs 22
trace(container.height);//outputs 101

Nota: que va a necesitar el componente ComboBox en la biblioteca. Estoy usando Flash CS3 para esto.

Si invalidate / volver a dibujar, como esto:

combo.invalidate(InvalidationType.ALL,true);
combo.drawNow();

los cambios de altura de 101 a 104.

¿Soluciones?

ACTUALIZACIÓN: He sobreescritos el método ConfigUI en una subclase ComboBox, pero las medidas son correctas todo el tiempo. ¿Por qué cambia la altura del contenedor a 100?

¿Fue útil?

Solución

Esto es debido a la implantación de Adobe tonto de los componentes de Flash, si nos fijamos en el segundo marco de un componente dentro de una idea del flash se puede ver que es imagen de usuario temporal que devuelve el tamaño inicial.

introducir descripción de la imagen aquí

Para resolver este debe iterar sobre los niños avatar y normalizar su tamaño:

public static function normalizedComponent(component:Sprite):void {
    for (var i:int = 0; i < component.numChildren; i++) {
        component.getChildAt(i).height = component.height;
        component.getChildAt(i).width = component.width;
    }
}

uso:

var comboBox:ComboBox = new ComboBox();
normalizedComponent(comboBox);
normalizedComponent(comboBox.textField);

Otros consejos

"si se abre, entonces la altura Con el cuadro desplegable"

Hmm, creo que cuando se añade a la lista de la displayList debajo del botón de su realidad agregado tiene una ventana emergente. Por lo que la altura se supone que debe seguir siendo la altura de botón, ya que el sprite en realidad nunca se contendrá la lista desplegable.

Una posible razón de la altura del envase podría estar equivocado antes de que salga a través de toda invalidación podría deberse a los niños que contiene. Tal vez la piel cuadro combinado (podría ser un clip de película de 102px de altura) o un cuadro combinado sub-componente que siempre comienzan por 102px altura o con la altura raro (campo de texto en un botón se sabe que en algún momento equivocado).

Una solución sencilla sería la de esperar a que un evento creationComplete / agregado y ver cuál es la altura final, a continuación, dibujar el borde.

No creo que esto un error exclusiva ComboBox.

Cuando agrego un Button componente a un contenedor de Sprite también consigo resultados diferentes al trazar el botón y las dimensiones de los contenedores. En realidad, recibo los mismos resultados 100 x 100.

Yo descartaría el menú desplegable cuadro posibilidad, ya que el componente Button no tiene uno.

Creo que la solución sería la misma para los 2 componentes (objetos ComboBox y Button), pero no he encontrado la solución por el momento. Se actualizará cuando lo haga.

ACTUALIZACIÓN:

Yo era capaz de conseguir esto utilizando validateNow() de trabajo, y unos minutos más tarde - He encontrado el siguiente enlace: http://forums.adobe.com/message/816912?tstart=0

En esencia, el enlace nos enseña a poner la llamada validateNow() dentro de un evento EnterFrame, o dentro de un SetTimeout con la sincronización apropiada.

Por lo tanto - que supongo que la altura mostrada de ComboBox es el real Altura - id est, si es abierto, entonces la altura Con el cuadro desplegable, si no se a continuación, SIN. Sin embargo - los artículos están todavía allí, aunque con juego .visible a false , que todavía se expande el contenedor, incluso si no puede ver que tanto ... - Yo diría que hacer:

container.graphics.drawRect(0, 0, combo.width, combo.height);

Esa es la manera de hacerlo por lo general, así ...

¿verdad configuración manualmente antes de este código:

container.width=100;

container.height=100;

container.graphics.drawRect(0,0,container.width,container.height);

Hola me encontró en algún lugar una solución para un problema similar con NumericStepper.

y la solución fue:

var tInput:TextInput = numericStepper.getChildAt(2) as TextInput;
tInput.textField.height = 22; 

En su caso intente lo siguiente:

var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22; 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top