实际上,您可能没有滚动 VBox;很有可能,如果您的 VBox 包含在另一个容器中,例如 Canvas 或类似容器,并且您按您所说的那样向 VBox 添加项目,那么进行滚动的是 Canvas,而不是 VBox - 在在这种情况下,VBox 确实会为其滚动位置返回 0。
一种或另一种方式,你是对的——你必须设置组件的高度;甚至约束布局设置(例如,“bottom='10'”等)也不起作用。但是,如果您可以设法设置 VBox 的高度,或者通过以某种方式将其尺寸绑定到另一个控件,或者通过将它们明确设置为孩子的附加/创建过程的一部分,您应该能够完成您所追求的。
下面是一个 AIR 应用程序的示例,我已经模拟了该示例以说明该示例。基本上它只是将随机大小的框添加到 VBox 中,并在创建每个子项后滚动到 VBox 的底部。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" verticalScrollPolicy="off" horizontalScrollPolicy="off" width="250">
<mx:Script>
<![CDATA[
import mx.core.Application;
import mx.containers.Box;
import mx.events.FlexEvent;
private function addItem(h:Number):void
{
var b:Box = new Box();
b.width = 200;
b.setStyle("backgroundColor", 0xFFFFFF);
b.height = h;
// Wait for the component to complete its creation, so you can measure and scroll accordingly later
b.addEventListener(FlexEvent.CREATION_COMPLETE, b_creationComplete);
vb.addChild(b);
}
private function b_creationComplete(event:FlexEvent):void
{
event.currentTarget.removeEventListener(FlexEvent.CREATION_COMPLETE, b_creationComplete);
vb.verticalScrollPosition = vb.getChildAt(vb.numChildren - 1).y;
}
]]>
</mx:Script>
<mx:VBox id="vb" top="10" right="10" left="10" height="{Application.application.height - 80}" verticalScrollPolicy="on" />
<mx:Button label="Add Item" click="addItem(Math.random() * 100)" bottom="10" left="10" />
</mx:WindowedApplication>
在这种情况下,VBox 的高度被绑定到它的包含组件的高度(这里,只是应用程序)。其他一切都应该是不言自明的。
希望有帮助!如果您有任何问题,请回帖。