iOS根据文字字数动态确定Label宽高

我们有时候在写项目的时候,会碰到,意见反馈,还有其他地方,讲座活动细则等需要大篇展示的文本,

因为每次服务器返回的内容大小不一,所以需要动态的调整label的宽高:

在ios 6 的时候可以:

-(void)creatLabel
{
    //根据文字 字数动态确定label宽高
    
    _nameLabel = [[UILabel alloc]init];
    
    _nameLabel.frame = CGRectMake(100, 100, 100, 40);
    
    _nameLabel.backgroundColor = [UIColor redColor];
    
    _nameLabel.text = @"菩提本无树";
    
    //设置label的字体  HelveticaNeue  Courier
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:24.0f];
    _nameLabel.font = font;
    //根据字体得到nsstring的尺寸
    CGSize size = [_nameLabel.text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil]];
    //名字的高
    CGFloat nameH = size.height;
    //名字的宽
    CGFloat nameW = size.width;
    
    _nameLabel.frame = CGRectMake(100, 100, nameW, nameH);
    
    [self.view addSubview:_nameLabel];
}

ios 7 的时候可以:

-(void)creatTextField
{
    //根据正文内容多少,动态确定正文content的frame
    
    _content = [[UILabel alloc]init];
    
    _content.frame = CGRectMake(17, 200, self.view.frame.size.width-34, 120);
    
    _content.backgroundColor = [UIColor redColor];
    
    _content.clipsToBounds = YES;
    
    _content.layer.cornerRadius = 10;
    
    _content.numberOfLines = 0;
    
    _content.layer.borderColor = [UIColor grayColor].CGColor;
    
    _content.layer.borderWidth = 0.8;
    
    _content.text = @"今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗";
    
    //宽度
    CGFloat contentW = self.view.bounds.size.width - 34;
    
    //label的字体 HelveticaNeue  Courier
    UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:18.0f];
    
    _content.font = fnt;
    
    // iOS7中用以下方法替代过时的iOS6中的sizeWithFont:constrainedToSize:lineBreakMode:方法
    
    CGRect tmpRect = [_content.text boundingRectWithSize:CGSizeMake(contentW, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil] context:nil];

    // 高度H
    CGFloat contentH = tmpRect.size.height;
    
    NSLog(@"调整后的显示宽度:%f,显示高度:%f",contentW,contentH);
    
    _content.frame = CGRectMake(17, 200, contentW,contentH);
    
    [self.view addSubview:_content];
}

这样可以很好的解决这个问题!

原文地址:https://www.cnblogs.com/hero11223/p/5445676.html