我从Flex 4.1中的s:Label中得到一个奇怪的例外。我有一个父(扩展BorderContainer),其中有一个s:Label。
在父构造函数中我有:
label = new Label();
label.setStyle("color", "Red");
label.setStyle("fontSize", 20);
稍后设置标签的文本(仅在字符上),定位并添加addElement()。在我开始实现父组件的大小调整之前,一切都很好。为了将标签放在正确的位置,我将其定位移至updateDisplayList():
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
...
label.x = width - 10;
label.y = height - 10;
}
调整父级的大小时,如果大小太小,我会得到以下异常:
ReferenceError: Error #1069: Property -1 not found on __AS3__.vec.Vector.<flash.display::DisplayObject> and there is no default value.
at spark.components::Label/truncateText()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Label.as:1246]
at spark.components::Label/http://www.adobe.com/2006/flex/mx/internal::composeTextLines()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Label.as:485]
at spark.components.supportClasses::TextBase/updateDisplayList()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\supportClasses\TextBase.as:684]
at mx.core::UIComponent/validateDisplayList()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:8709]
at mx.managers::LayoutManager/validateDisplayList()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:663]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:736]
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1072]
正如我所说,标签只包含一个字符,我不需要任何截断。此外,当我得到例外时,标签仍有一些空白。
我试过了:
label.maxDisplayedLines = 1;
但这并没有解决问题。我甚至尝试回到mx Label并将truncateToFit设置为false,但是当父级太小时,我得到了相同的异常。
任何想法将不胜感激。提前致谢! :)
更新 我已经使用基于组的自定义组件对此进行了测试,问题仍然存在。奇怪的是,如果我在调整大小操作的开始时使用removeElement()删除标签,我会得到相同的异常。即使我将标签引用设置为null,希望将垃圾收集起来也是有效的。
答案 0 :(得分:1)
您是否有理由将标签设置为right="10"
?这是一种风格,所以你需要设置它。只要您的父母使用绝对布局,它就会起作用。
至于截断文本,我相信有一种方法可以禁用它(可能是truncate =“false”);