#Cocos Creator# 获得Label动态尺寸的解决方法

问题环境

有一个带背景的文本标签,文本内容是可变的,希望背景图的宽度也跟着文本一起变化。

label.string = text; // 设置文本
label_bg.width = label.node.width; // 修改背景尺寸 BUG: 这里只能获得标签的初始width

测试发现,标签节点的宽度并没有在设置完文本以后立即改变。

原因

原因是因为,在Cocos Creator中,label的尺寸是在渲染时计算出来的,在设置string时并没有立即计算。

解决方法

参考Cocos 论坛上的方法,在设置完string以后,手动调用一次label._updateRenderData(true)

新的js代码如下:

label.string = text; // 设置文本
label._updateRenderData(true); // 这里调用一次手动渲染
label_bg.width = label.node.width; // 修改背景尺寸

参考

  1. https://forum.cocos.com/t/2-0-node-width/68227
  2. https://forum.cocos.com/t/label/65851/3

重要更新

Cocos Creator 2.2.0 已经移除了_updateRenderData方法。

经测试,可用_forceUpdateRenderData方法替代。