关于Label的大小问题

如果引用一个label,并且修改label的string,label的width不会随之改变,下面上代码

properties: {
label: {
default: null,
type: cc.Label
}
},

// use this for initialization
onLoad: function () {
    var lb = this.label;
    cc.log("before=" + lb.node.getContentSize().width);
    lb.string =  "我的家在东北,松花江上,那里有森林和煤矿,我家住在黄土高坡,哦哦哦哦哦,你是谁,为了谁,我的战友你何时归,你是谁,为了谁,我的乡亲,我的战友,我的兄弟和姐妹,姐妹,啊啊啊啊,啊啊啊~啊啊啊,你是谁";
    cc.log("after=" + lb.node.getContentSize().width);
},

这样before和after的大小都是一样的,creator版本1.0.3正式版,label的overflow为NONE

@atmy

你在脚本里面设置完 string 以后,用 getContentSize 无法立刻获取新的 label 大小么?
能否提供一个测试 demo? 另外,你使用的 creator 版本是?

我没用getContentSize,我用的width,马上我试试getContentSize

恩, 用 width 理论上也不应该有问题,可能是 bug。。

楼主最好新建一个 hello world 项目重现出来,发给我 我应该很快就可以解决这个问题。

如果脚本挂载到label上,脚本里更改string,label的width会随之更改,但是如果这个label是引用过来的,就不能及时更改,我不知道这算不算问题,我把我的包发给你看看labelTest.zip (215.9 KB)

谢谢,我先吃饭,下午优先解决这个问题。

:slightly_smiling:好的,谢谢,幸苦你了

这是一个bug,你把逻辑放到 start 回调里面就好了。

:grin:好的谢谢

这个问题已经存在啊。。。

OnLoad惹的锅,只要node.active=false,OnLoad就不会调用,等active=true才会调用,调用后才能获取到真实的宽高

请问下我在start里面调用还是一样的,另外我在update里面也加了个打印的 发现是在后面一帧里这个长度才改过来

这bug还是bug

可以调用label的_forceUpdateRenderData方法,会立即更新label的尺寸

1赞

感谢,可行