2008-11-15 13 views
10

que tienen un lienzo en Flex, que pueda sólo para ser desplazado en dirección vertical, por lo que establecer los atributos de la tela de la siguiente manera:Flex: Prevenir la barra de desplazamiento de cubrir el contenido cuando se visualizan automáticamente

verticalScrollPolicy="auto" horizontalScrollPolicy="off" 

El El problema aquí es que la barra de desplazamiento vertical cubre el contenido cuando aparece, aunque queda suficiente espacio horizontal. Hubiera esperado que el tamaño del contenido se hubiera ajustado automáticamente.

Al configurar la política de desplazamiento vertical en "on", no se cubre el contenido también.

En caso de que establezca las dos políticas de desplazamiento en 'auto' también obtengo una barra de desplazamiento horizontal simplemente para desplazarse al área que está cubierta por la barra de desplazamiento vertical.

¿Existe una solución alternativa a cómo puedo retransmitir el contenido del lienzo cuando se muestra la barra de desplazamiento vertical para que no cubra ningún contenido?

Respuesta

16

Es un error. Ver Flex verticalScrollPolicy bug para una solución alternativa.

+0

maravilloso. He luchado con esto durante años, gracias por el puntero. –

+0

Esto solo funciona cuando el lienzo tiene una altura explícita. ¿Qué pasa si tiene altura basada en porcentaje? –

+0

@ bug-a-lot Acabo de implementar esto para un lienzo que tiene un alto de porcentaje y funcionó perfectamente. – Herms

4

Sólo una nota con respecto a este tema: En realidad no es un error, pero conocido (y la intención?) Comportamiento:

"Flex considera barras de desplazamiento en sus cálculos de dimensionamiento sólo si establece explícitamente la desplazarse política para ScrollPolicy.ON. por lo tanto, si se utiliza una política de desplazamiento automático (por defecto), la barra de desplazamiento superpone a los botones. para evitar este comportamiento, puede establecer el height propiedad para el contenedor HBox o permitir la H Contenedor de caja para cambiar el tamaño estableciendo un ancho basado en porcentaje. Recuerde que al cambiar la altura de el contenedor HBox causa otros componentes en su aplicación para mover y cambiar el tamaño de acuerdo con sus propias reglas de dimensionamiento "

-. De Sizing Components en el Flex 3 ayuda, bajo . "uso de barras de desplazamiento"

+0

Entonces sigue siendo un error. He establecido tanto el porcentaje de altura como el de ancho. Sin embargo, no cambia el tamaño del contenido, cuando se muestra la barra de desplazamiento. – Yaba

+0

De esa manera entiendo que el extracto es que estableciendo el ancho en un valor de porcentaje y * no * estableciendo la altura en absoluto, el componente cambiará de tamaño cuando se muestre la barra de desplazamiento, no el contenido. Sin embargo, esto aún puede no aplicarse a su situación específica. – hasseg

0

estoy, también por lo general tienen algunos problemas con el verticalScrollBar en Flex, por lo que prefieren utilizar la barra de desplazamiento del navegador para desplazarse a la aplicación completa puede encontrado una solución aquí:. How to Resize the Flex Stage and Use the Browser Scrollbar.

El código que utilizo:

En Flex:

ExternalInterface.call("setInitialFlashHeight", this.height); 

En mi HTML (JavaScript):

function setInitialFlashHeight(newHeight) { 
    document.getElementById('my_flash').style.height = newHeight + 'px'; 
} 

Y si desea agregar (o eliminar) una cierta altura:

function addFlashHeight(height) { 
    var divHeight; 
    var obj = document.getElementById('my_flash'); 

    if (obj.offsetHeight) { 
     divHeight = obj.offsetHeight; 
    } else if (obj.style.pixelHeight){ 
     divHeight = obj.style.pixelHeight; 
    } 

    var newHeight = divHeight + height; 
    document.getElementById('my_flash').style.height = newHeight + 'px'; 
} 

Eliminar, y Usa "-" en lugar de "+".

2

en vbox u otro componente basado en Contenedor, he resuelto ese problema de esa manera.

incorrecto:

<mx:VBox width="100%" height="100%" 
     verticalScrollPolicy="auto" horizontalScrollPolicy="off"> 
    <mx:Repeater dataProvider="{hede}"> 
      <custom:RenderItem ........../> 
    </mx:Repeater> 
</mx:VBox> 

no hay ninguna barra de desplazamiento

versión de trabajo:

<mx:VBox width="100%" height="100%" 
    **minHeight="1"** horizontalScrollPolicy="off"> 
    <mx:Repeater dataProvider="{hede}"> 
     <custom:RenderItem ........../> 
    </mx:Repeater> 
</mx:VBox> 
Cuestiones relacionadas