1

当我将 ComboBox 组件添加到 Sprite 中时,容器的高度大于应有的高度。

这就是我的意思:

import fl.controls.ComboBox;
//add combo box inside a container sprite
var combo:ComboBox = new ComboBox();
var container:Sprite = new Sprite();
addChild(container);
container.addChild(combo);
//draw the outline of the container sprite
container.graphics.lineStyle(1,0x009900);
container.graphics.drawRect(0,0,container.width,container.height);
//I don't get this:
trace(combo.height);//outputs 22
trace(container.height);//outputs 101

注意:您将需要库中的 ComboBox 组件。为此,我正在使用 Flash CS3。

如果我无效/重绘,像这样:

combo.invalidate(InvalidationType.ALL,true);
combo.drawNow();

高度从 101 变为 104。

有什么解决办法吗?

更新: 我已经覆盖了 ComboBox 子类中的 configUI 方法,但测量结果始终正确。为什么容器高度变为 100 ?

4

6 回答 6

3

这是因为 Adob​​e 愚蠢地植入了 Flash 组件,如果您在 Flash IDEA 中查看组件的第二帧,您可以看到它是返回初始大小的临时头像。

在此处输入图像描述

要解决这个问题,您应该遍历 avatar 孩子并标准化它们的大小:

public static function normalizedComponent(component:Sprite):void {
    for (var i:int = 0; i < component.numChildren; i++) {
        component.getChildAt(i).height = component.height;
        component.getChildAt(i).width = component.width;
    }
}

用法:

var comboBox:ComboBox = new ComboBox();
normalizedComponent(comboBox);
normalizedComponent(comboBox.textField);
于 2012-11-13T14:56:13.273 回答
1

“如果它被打开,那么下拉框的高度”

嗯,我认为当列表添加到按钮下方的 displayList 时,它实际添加的会有一个弹出窗口。所以高度应该保持按钮高度,因为精灵永远不会真正包含下拉列表。

Container 高度在经历任何失效之前可能出错的一个可能原因可能是它包含的子项。可能是组合框皮肤(可能是高度为 102 像素的影片剪辑)或组合框子组件,总是从 102 像素高度或奇怪的高度开始(已知按钮中的文本字段有时是错误的)。

一个简单的解决方案是等到创建完成/添加事件并查看最终高度是多少,然后绘制边框。

于 2010-09-30T11:47:45.367 回答
1

我不认为这是一个ComboBox独家错误。

当我将组件添加ButtonSprite容器时,在跟踪按钮和容器尺寸时也会得到不同的结果。实际上,我收到了相同的100 x 100结果。

我会放弃下拉框的可能性,因为该Button组件没有。

我认为 2 个组件对象 (ComboBoxButton) 的解决方法是相同的,但我还没有找到解决方案。当我这样做时会更新。

更新:

我只是能够使用validateNow(),几分钟后 - 我找到了以下链接:http ://forums.adobe.com/message/816912?tstart=0

本质上,该链接指示我们将validateNow()调用放在EnterFrame事件中,或者在SetTimeout适当的时间安排中。

于 2011-01-29T20:01:10.320 回答
0

所以 - 我猜ComboBox的显示高度是实际高度 - id est,如果它被打开,那么带有下拉框的高度,如果没有,那么没有。但是 - 项目仍然存在,尽管 .visible 设置为false,即使您看不到它仍然会扩展容器......因此 - 我会说这样做:

container.graphics.drawRect(0, 0, combo.width, combo.height);

这也是通常的做法......

于 2010-09-06T15:21:13.410 回答
0

您可以在此代码之前手动设置吗:

container.width=100;

container.height=100;

container.graphics.drawRect(0,0,container.width,container.height);

于 2010-09-07T14:11:00.440 回答
0

嗨,我在某个地方找到了解决 NumericStepper 类似问题的方法。

解决方案是:

var tInput:TextInput = numericStepper.getChildAt(2) as TextInput;
tInput.textField.height = 22; 

在您的情况下,请尝试以下操作:

var tInput:TextInput = combo.getChildAt(1) as TextInput;
tInput.textField.height = 22; 
于 2010-11-11T06:26:21.337 回答