根据内容动态更改UILabel的高度

Sus*_*rma 3 objective-c uilabel ios7.1 xcode5.1

我有一个UILabel子视图,UIButton我从另一个视图传递值并填充UILabel.现在,我希望UILabel 必须根据内容更改其高度.如果文本为"Hello",则必须为1行,但如果文本为"我的文本太长而无法放入标签",则必须更改其大小.我用过

   [self.addressLabel sizeToFit];
Run Code Online (Sandbox Code Playgroud)

但为此,我需要在UILabel下留下空白空间.我想要的是,当文本强度增加时,UILabel和UIView的大小必须扩展.

kar*_*hik 12

使用下面的方法可以获得标签的高度

  • 文本 - 标签的文本
  • font - 标签中使用的字体
  • 宽度 - 标签的宽度

    -(float) getHeightForText:(NSString*) text withFont:(UIFont*) font andWidth:(float) width{
        CGSize constraint = CGSizeMake(width , 20000.0f);
        CGSize title_size;
        float totalHeight;
    
        SEL selector = @selector(boundingRectWithSize:options:attributes:context:);
        if ([text respondsToSelector:selector]) {                
            title_size = [text boundingRectWithSize:constraint
                                            options:NSStringDrawingUsesLineFragmentOrigin
                                         attributes:@{ NSFontAttributeName : font }
                                            context:nil].size;
    
            totalHeight = ceil(title_size.height); 
        } else {                
            title_size = [text sizeWithFont:font
                          constrainedToSize:constraint
                              lineBreakMode:NSLineBreakByWordWrapping];                
            totalHeight = title_size.height ;                
        }
    
        CGFloat height = MAX(totalHeight, 40.0f);
        return height;            
    }
    
    Run Code Online (Sandbox Code Playgroud)

并使用高度创建一个框架

CGRect frame = questionTitleLbl.frame;

float height = [self getHeightForText:questionTitleLbl.text 
                             withFont:questionTitleLbl.font
                            andWidth:questionTitleLbl.frame.size.width];
float gap = 2;

cell.questionTitleLbl.frame = CGRectMake(frame.origin.x, 
                                         frame.origin.y, 
                                         frame.size.width, 
                                         height);
Run Code Online (Sandbox Code Playgroud)