是否有人遇到过这种问题吗?就是图片的宽度是关联了文字的宽度,但是第一次会出现图片的显示的宽度和ContentSize 不一致。一定要刷新下才行,比如:把MovieClip 重新设置active 或者contentSize 在修改下才能显示正常了,在代码中同一帧里刷新一下都不行,只能延迟一帧才能生效。
找到问题了,因为dirty 列表渲染顺序是【bg, title】,先渲染bg, 再渲染title ,渲染title 的 updateRenderer() 过程中,触发了size changed, size change 又会触发关联器,关联器会修改bg 的size ,bg再次进行mark dirty, 但是此时循环队列还未结束,倒是dirtyVersion 并未修改,bg无法加入dirty 队列里,导致无法就算size change 也无法正常触发渲染。下一帧能正常是因为dirtyVersion 已经变化,如果再次mark能正常加入dirty队列了!
解决方案:修改ui-renderer-manager.ts
public updateAllDirtyRenderers (): void {
const dirtyRenderers = this._dirtyRenderers;
for (let i = 0; i < this._dirtyRenderers.length; i++) {
if (DEBUG) {
assert(dirtyRenderers[i]._internalId !== -1);
}
dirtyRenderers[i].updateRenderer();
// 每次渲染完后,重置 _dirtyVersion ,如果再次触发了mark ,也能再次加入队列继续渲染
dirtyRenderers[i]._dirtyVersion = -1;
}
this._dirtyRenderers.length = 0;
this._dirtyVersion++;
}


