2010-09-03 28 views
0

J'ai un problème: je crée un conteneur et son contenu est en cours d'exécution. Voici une structure grossière:Traiter l'ajout automatique de barres de défilement

--VBox

---- Formulaire

------- FormItem

...

------ -FormItem

---- ControlBar

Je fixe maxHeights pour la form conteneur pour le garder dans les limites de l'écran. Mais quand j'obtiens une barre de défilement verticale, l'horizontal apparaît aussi (il semble que ce n'est pas assez de place pour ce VScrollBar).

Pour échapper à ce problème, j'ai créé un écouteur pour défiler horisontal apparaît, donc s'il semble, je vais augmenter contenant un peu, il serait pieds l'autre scrollbar normalement:

form.addEventListener(Event.ADDED, function(event:Event):void{ 
if(event.target is HScrollBar){ 
    while(form.horizontalScrollBar && form.horizontalScrollBar.visible && !(form.width > form.maxWidth)){ 
     form.width += 10; 
     form.validateDisplayList(); 
    } 
} 
}); 

I J'ai essayé aussi validateNow et d'autres méthodes similaires. Ce que j'ai ici: 1. Le HScrollBar est en cours d'ajout. 2. Nous augmentons un peu la largeur du conteneur, donc il disparaît. 3. Lorsqu'il disparaît, la validation renvoie l'exception null-pointer lorsqu'il essaie de mesurer la barre de défilement inexistante. J'ai également essayé d'ajouter validateProperties avant la validation, mais cela n'a pas fonctionné non plus.

Quelqu'un peut-il aider à se débarrasser de ce rouleau ennuyeux? :)

+0

Avez-vous ou n'avez-vous pas défini horizontalScrollPolicy sur votre composant et, si oui, à quelle valeur? – cobaltduck

+0

horizontalScrollPolicy également comme verticalScrollPolicy n'a pas été défini explicitement. Donc, ils devraient être mis en auto, autant que je comprends. – Antenka

Répondre

0

Le problème est - si votre scrollPolicy est définie sur auto Flex ne prend pas en compte les dimensions de défilement lors du calcul de la mise en page. Donc, lorsque le défilement apparaît, il est affiché sur le contenu qu'il est déjà là. Et lorsque le contenu est masqué par le défilement, un défilement horizontal apparaît pour que tout le contenu soit accessible par défilement. La façon dont je traite habituellement cela est de toujours définir paddingRight (ou right lorsque parent est Canvas) propriété de style à 20 (la largeur de défilement habituelle est de 16) de sorte que lorsque le défilement apparaît, il ne chevauche rien.

+0

Désolé pour une réponse tardive. J'ai essayé votre solution, mais ça ne marchera pas pour mon cas * soupir *. Quoi qu'il en soit, merci beaucoup pour un pourboire! – Antenka

+0

Ok, alors qu'en est-il d'écouter VScrollBar ajouté event (au lieu de HScrollBar) et de changer le style approprié dans un gestionnaire. Vous devrez également écouter l'événement supprimé. – 2DH