Flex: cambie la posición de la barra de desplazamiento a la parte superior de un componente HorizontalList
-
03-07-2019 - |
Pregunta
Por defecto, la barra de desplazamiento horizontal de un componente HorizontalList estará en la parte inferior. ¿Hay alguna forma de reposicionarlo para que esté en la parte superior?
Solo por claridad, no me refiero a mover la posición de desplazamiento usando scrollToIndex u horizontalScrollPosition o similar, sino la posición física real del componente de la barra de desplazamiento.
¡Cualquier sugerencia sería muy apreciada!
Solución
Hace un tiempo estuve buscando algo similar y encontré esta publicación . Eventualmente terminé resolviendo mi problema de otra manera, así que no usé esa solución, sin embargo, podría funcionar para lo que quieres.
Otros consejos
He tenido que hacer lo mismo anteriormente. Tuve que buscar en las clases base (para manejar algunos problemas de enmascaramiento / posicionamiento) y esto es lo que se me ocurrió:
package
{
import flash.display.DisplayObject;
import mx.controls.HorizontalList;
import mx.core.EdgeMetrics;
public class ReverseHList extends HorizontalList
{
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var w:Number = unscaledWidth;
var h:Number = unscaledHeight;
var vm:EdgeMetrics = viewMetrics;
if (horizontalScrollBar && horizontalScrollBar.visible)
{
horizontalScrollBar.setActualSize(w - vm.left - vm.right,
horizontalScrollBar.minHeight);
horizontalScrollBar.move(vm.left, vm.top);
horizontalScrollBar.enabled = enabled;
}
var mask:DisplayObject = maskShape;
var wd:Number = w - vm.left - vm.right;
var ht:Number = h - vm.top - vm.bottom;
mask.width = wd < 0 ? 0 : wd;
mask.height = ht < 0 ? 0 : ht;
mask.x = vm.left;
mask.y = vm.top + vm.bottom;
}
override protected function adjustListContent(unscaledWidth:Number = -1,
unscaledHeight:Number = -1):void
{
super.adjustListContent(unscaledWidth, unscaledHeight);
var lcx:Number = viewMetrics.left + listContent.leftOffset;
var lcy:Number = (viewMetrics.top + listContent.topOffset) + viewMetrics.bottom;
listContent.move(lcx, lcy);
}
}
}