在设置了显式宽度后,如何将 Flex 标签的宽度重置为“自适应”?

5
一旦我在弹性标签上设置了widthpercentWidth属性,是否有一种方法可以将其宽度重置为默认值(即文本加填充的宽度)?
我正在使用标签作为渲染器。在某些情况下,我希望它自动调整大小以适应文本,而在其他情况下,我希望它成为其容器的百分比宽度。显然,我可以使用两个单独的标签,一个用于上述每种情况,但我想知道是否有可能将标签重置为其默认行为。
2个回答

8
label.width = NaN;
//not sure if the following lines are required
label.invalidateSize();
label.width = label.measuredWidth;

来自 flex livedocs

如果您设置了组件的特定高度和宽度,即使您显式调用invalidateSize()方法,Flex也不会调用measure()方法。也就是说,只有当组件的explicitWidth属性或explicitHeight属性为NaN时,Flex才会调用measure()方法。


这对我起作用了,不需要调用invalidateSize或分配给measuredWidth。我看过文档中的那句话,但我还没有(可能仍然不理解)宽度和/或percentWidth属性与explicitWidth之间的关系。 - Sam Martin
我的理解是explicitWidth是组件可见部分的宽度。如果实际宽度超过此值,滚动条将出现。这是组件的显式指定宽度(由程序员指定)。如果您设置宽度,则相同的值将分配给explicitWidth属性,如果指定了percentWidth,则使用计算宽度(基于父项的大小)作为 explicitWidth - Amarghosh

1

将宽度设置为未定义:

yourLabelId.width = undefined;


3
由于宽度未被标记为“*”,因此未定义实际上会被转换为 null。当您的新高度传递到存储位置(我相信是 explicitWidth)时,它实际上可能最终变成 NaN。 - Josh Tynjala
将我的宽度设置为未定义似乎可以工作,但我同意NaN更干净(我正在慢慢学习ActionScript类型系统)。如果这个答案被编辑了(s/undefined/NaN/g),我会把它“接受”,因为它让我快速上手。 - Sam Martin
值得一提的是,如果我设置了percentWidth,则将宽度设置为NaN没有任何效果。我最初修改的属性必须设置为NaN才能将标签重置为其默认(测量)宽度。这可能很明显,但也可能令人困惑。 - Sam Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接