Label设定Resize模式后,如何获取真实Label宽高?

Label设置为Resize模式后,因为要设置宽度才能自动换行,当我的Text没有达到指定宽度的时候,如何获取到真实的宽度?


将Label文本设置为"ABCD",并立即渲染获取实时size
image
ABCD的宽度肯定比190要小,但是得到的值却没有变化
image

咱就说要不下一帧获取下试试?this.scheduleOnce(()=>{}, 0.0)

我就不 我就要这一帧 :rofl:

引擎要是能提供手动刷新接口就好了

哈哈哈,我记得好像文本修改的话,都是下一帧起效的?忘了是不是了。所以即使有刷新,也没法直接取到吧 :test:

updateRenderData 这个可以吗

可以试下label._forceUpdateRenderData();然后再获取高度

3.0即使使用了forceUpdateRenderData(true)也不能立刻获取到真实宽高,需要延迟一帧

先通过label.updateRenderData(true); 强制刷新,拿到当前的UITransform的高度,通过label.lineHeight > label.getComponent(UITranform).height * 0.5 条件,判断是否只有一行文本,然后再把label.overflow = Label.Overflow.NONE, 强制刷新, 这样就能拿到只有一行文本时的宽度, 最后再把overflow改回RESIZE_HEIGHT

1赞

3.8版本,试了是可以的