如何动态设置UILabel宽度?

时间:2014-07-28 11:57:45

标签: ios objective-c ipad uilabel

我有一个UILabel,其文字是动态生成的,因此根据文字,UILabel宽度会从iOS6 to iOS8增加。这有什么解决方案吗?它仅适用于iOS7和iOS6.0 boundingRectWithSize方法崩溃,仅适用于iOS7.0及更高版本的boundingRectWithSize方法。

float widthIs =[[tagsArray objectAtIndex:i] boundingRectWithSize:_tagsValue.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:_tagsValue.font } context:nil].size.width;
_tagsValue.frame=CGRectMake(prevTag, 2, widthIs+20, 30);
prevTag+=widthIs+30;

3 个答案:

答案 0 :(得分:1)

使用此功能,这将适用于IOS6& IOS 7。但我不确定IOS8,因为我没有在IOS8上测试它。

float width = [LABEL_TEXT_STRING sizeWithFont:LABEL_FONT constrainedToSize:DEFAULT_SIZE_OF_LABEL lineBreakMode:LABEL.lineBreakMode].width;

答案 1 :(得分:1)

你需要检查iOS6和iOS7,

if([[[tagsArray objectAtIndex:i] respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){
    float widthIs =[[tagsArray objectAtIndex:i] boundingRectWithSize:_tagsValue.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:_tagsValue.font } context:nil].size.width;
    _tagsValue.frame=CGRectMake(prevTag, 2, widthIs+20, 30);
    prevTag+=widthIs+30;
}
else{
    float widthIs = [[[tagsArray objectAtIndex:i] sizeWithFont:font constrainedToSize:(CGSize){CGFLOAT_MAX, CGFLOAT_MAX}];
}

答案 2 :(得分:-1)

使用此方法获取宽度
 将您的标签作为参数传递

 - (CGFloat)getWidth:(UILabel *)label{

      CGSize sizeOfText = [label.text boundingRectWithSize: CGSizeMake(CGFLOAT_MAX, self.bounds.size.height)
                                                  options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                               attributes: [NSDictionary dictionaryWithObject:label.font
                                                forKey:NSFontAttributeName]
                                                  context: nil].size;

    return sizeOfText.width; 

    }