今天遇到一个很诡异的问题,在某些情况下(并不是总出现),updateDisplayList中buttonBar.measuredWidth总是等于0,导致buttonBar在页面上无法显示,调用buttonBar.validateNow();问题解决。可能是buttonBar的validateSize()方法没有调用。
另外如果不用buttonBar.validateNow();调用buttonBar.setStyle("backgroundColor", 0x00ff00);也可以解决问题。决定把UIComponent源代码读一遍,9000多行...
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
if(!isDragging){
var paddingLeft:Number = getStyle("paddingLeft") > 10? getStyle("paddingLeft") : 10;
var paddingRight:Number = getStyle("paddingRight") > 10? getStyle("paddingRight") : 10;
var headerHeight:Number = getHeaderHeight();
buttonBar.validateNow();
buttonBar.width = buttonBar.measuredWidth;
buttonBar.height = headerHeight;
buttonBar.x = unscaledWidth - paddingRight - buttonBar.width;
buttonBar.y = 0;
titleTextField.width = buttonBar.x - paddingLeft;
titleTextField.toolTip = title;
}
}
本文探讨了在特定条件下ButtonBar的measuredWidth为0导致无法正常显示的问题,并提出了解决方案,包括调用validateNow及修改样式。

443

被折叠的 条评论
为什么被折叠?



