CCLabel在最大宽度已知的情况下如何获取实际宽高

当前环境在cocos2.2.6,

 在UI摆图中,会遇到一种情况就是 设定了label的最大宽度MAX_WIDTH,但label的内容是动态的,如何在label输入了文字之后获取label的真实宽高?

对于一个没有指定contensize 和 dimensions 的label, 直接getContentSize(), 宽度没有超过最大宽度MAX_WIDTH,就是单行,那么直接getContentSize()就是实际的宽高,

如果宽度超过了最大限定值,那么就必须自动换行了,自动换行要使用setDimensions(maxwidth,maxheight),maxwidth已经知道就是MAX_WIDTH,maxheight是不知道的,我来告诉你这里maxheight可以直接用0,

你会发现,最终的label就是你所想要的在最大宽度下自动换了行,并且高度就是文字所占的实际高度。唔哈哈。

 

 

int MAX_WIDTH = 337;
    std::string str = "中文中文中文中文中文中文中文中文中文中文中文中文";
    CCLabelTTF* label = CCLabelTTF::create(str.c_str(), font_name[2].c_str(), 22);
    label->setPosition(ccp(winSize.width/2,winSize.height/2));
    label->setHorizontalAlignment(CCTextAlignment::kCCTextAlignmentLeft);
    //label->setContentSize(CCSize(100,400));
    //label->setDimensions(CCSize(100, 400));
    addChild(label);


    CCSize size = label->getContentSize();
    CCLog("width:  %f ,height: %f", size.width, size.height);

    if (size.width > MAX_WIDTH)
    {
        label->setDimensions(CCSize(MAX_WIDTH,0));
    }
    else
    {

    }
    size = label->getContentSize();
    CCLog("width:  %f ,height: %f", size.width, size.height);

 

posted @ 2015-05-28 15:38  居家懒人  阅读(2205)  评论(0编辑  收藏  举报