0

我有一个ObjectHolder可以UIComponent容纳许多孩子的组件UIComponents。但是,在使用addChild()将这些子元素添加到之后ObjectHolder,它的宽度和高度仍然为零。是否可以UIComponent自动扩展到其包含的子组件的大小?

public class ObjectHolder extends UIComponent
{       
    public function ObjectHolder()
    {
        var c1:UIComponent = new UIComponent();
        c1.graphics.beginFill( 0xffffff );
        c1.graphics.drawRect(0, 0, 100, 100);
        addChild( c1 );
        trace( this.width );  // Displays zero
    }
}
4

2 回答 2

2

要更改组件的大小,您应该实现measure()method。但是您还应该遵循有关创建自定义组件的其他建议createChildren()在您的情况下,您应该在method中创建并添加子组件。

于 2011-08-25T14:30:39.980 回答
1

UIComponent 是否可以自动扩展为其包含的子组件的大小?

正式的答案是否定的。组件从不负责设置它自己的高度和宽度值;它只负责根据该组件的父级设置的值来调整其子级的大小和位置。

如果你在你的组件中实现了一个 measure() 方法,你可以使用它来设置你的组件的measuredWidth和measuredHeight。从本质上讲,这将是您向父母的容器提供的建议,说明您需要正确定位和调整所有子元素的大小。您自己的组件应根据传入的 unscaledWidth 和 unscaledHeight 值在 updateDisplayList() 中调整大小和定位。

大多数情况下,Flex 默认容器将遵循这些大小值;尽管在某些情况下它们不会。例如,如果子容器需要的大小大于父容器的大小。

于 2011-08-25T15:35:41.677 回答