关于Label设置Text后显示不全的问题

在编辑器上做一个Label,填入文字“123”,模式用Auto,如图bug_1
在代码里拿到这个Label,修改它的文字:
_tipLabel->setText(“sdfsdfsdf”);

得到的结果如图bug_2,文字显示不全

我去查了一下源码,原因见注释:
// Helper
bool CCLabelTTF::updateTexture()
{
CCTexture2D *tex;
tex = new CCTexture2D();

if (!tex)
    return false;

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    ccFontDefinition texDef = _prepareTextDefinition(true);
    tex->initWithString( m_string.c_str(), &texDef );

#else

    tex->initWithString( m_string.c_str(),
                        m_pFontName->c_str(),
                        m_fFontSize * CC_CONTENT_SCALE_FACTOR(),
                        CC_SIZE_POINTS_TO_PIXELS(m_tDimensions),                     //2.2.1版本,这个地方传入的m_tDimensions为0, 就没BUG,2.2.2版本,这个地方传入的m_tDimensions不为0,而是UI编辑器auto里显示的宽高,就会出问题
                        m_hAlignment,
                        m_vAlignment);

#endif

如果强行把m_tDimensions设置为0,单行Label的Bug就没了,但是TextArea模式的Label就会出问题
推测问题是:如果Label是TextArea模式,应该设置这个值,如果Label不是TextArea模式,就不应该设置这个值了
应该是UI编辑器载入数据的时候出了BUG

不知道该怎么修改,请开发检查一下吧

方案找到了,暂时可以工作了。还请斑竹再提供一个靠谱的方案吧
修改两处

void WidgetPropertiesReader0300::setPropsForLabelFromJsonDictionary(cocos2d::gui::Widget*widget,const rapidjson::Value& options)
{
//++这里加一个isIgnoreSize 判断
bool ignoreSizeExsit = DICTOOL->checkObjectExist_json(options, “ignoreSize”);
bool isIgnoreSize = false;
if (ignoreSizeExsit)
{
isIgnoreSize = DICTOOL->getBooleanValue_json(options, “ignoreSize”);
widget->ignoreContentAdaptWithSize(DICTOOL->getBooleanValue_json(options, “ignoreSize”));
}
//++这里加一个isIgnoreSize 判断

setPropsForWidgetFromJsonDictionary(widget, options);
cocos2d::gui::Label* label = (cocos2d::gui::Label*)widget;
bool touchScaleChangeAble = DICTOOL->getBooleanValue_json(options, "touchScaleEnable");
label->setTouchScaleChangeEnabled(touchScaleChangeAble);
const char* text = DICTOOL->getStringValue_json(options, "text");
label->setText(text);
bool fs = DICTOOL->checkObjectExist_json(options, "fontSize");
if (fs)
{
    label->setFontSize(DICTOOL->getIntValue_json(options, "fontSize"));
}
bool fn = DICTOOL->checkObjectExist_json(options, "fontName");
if (fn)
{
    label->setFontName(DICTOOL->getStringValue_json(options, "fontName"));
}
bool aw = DICTOOL->checkObjectExist_json(options, "areaWidth");
bool ah = DICTOOL->checkObjectExist_json(options, "areaHeight");
if (aw && ah && !isIgnoreSize)             //++这里加一个isIgnoreSize 判断
{
    CCSize size = CCSize(DICTOOL->getFloatValue_json(options, "areaWidth"),DICTOOL->getFloatValue_json(options,"areaHeight"));
    label->setTextAreaSize(size);
}

顶!:2::2:

请问是修改的哪个文件啊,现在你的解决方案被推荐为最佳解决方案

官方怎么不出解决方案,看来是直接把这个当解放方案了

这个方法确实能解决显示不全的问题,但是会导致label上绑其它控件的时候label坐标出现偏差,也就是说修好了一个问题还会出新问题

子曰:“一坑还未平息,一坑又来侵袭。”想必是出自此处。又学到了一个典故,妈妈再也不用担心我的学习啦~