首页 > 技术文章 > iOS-动态计算Label的高度

mancong 2016-04-15 16:01 原文

一. 要求

1.根据网络请求的回来的字符串内容,动态计算Label的高度.

二. 注意点

1. 要注意设置label 的 numberOfLines 为0;

2. MAXFLOAT 的作用. 设置高度无限大.

三.代码

#import "ViewController.h"

 

@interface ViewController ()

 

@property (nonatomic,strong) UILabel * label;

 

@end

 @implementation ViewController

 - (void)viewDidLoad

{

    [super viewDidLoad]; 

    [self createLabel];

}

- (void)createLabel

{

    self.label = [[UILabel alloc] init];

    

    self.label.backgroundColor = [UIColor yellowColor];

    

    NSString * str = @"1、毕业后才知道校园恋爱是最纯洁的;\n2、毕业后才知道学习是最重要的;\n3、毕业后才知道校园生活是最幸福的;\n4、毕业后才知道宿舍生活是最好的;\n5、毕业后才知道食堂的饭菜是最便宜的;\n6、毕业后才知道上学是最美妙的事。\n7、毕业后才知道学生花钱最大手大脚......";

    

    self.label.text = str;

    self.label.numberOfLines = 0;

    

    [self.view addSubview:self.label];

 

    UIFont * font = self.label.font;

// iOS 7.0 之前的方法.已经被弃用    

//    CGSize size = [self.label.text sizeWithFont:font constrainedToSize:CGSizeMake(_label.frame.size.width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];

    

    NSDictionary * dict = @{

                            NSFontAttributeName : font

                            };

     //计算label的文字宽高

    CGSize size = [self.label.text boundingRectWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size;

 

    CGFloat nameH = size.height;

    CGFloat nameW = size.width;

    NSLog(@"w: %f --h: %f",nameW,nameH);    

// 设置label的动态frame

    self.label.frame = CGRectMake(0, 30, nameW, nameH);

}

@end

 

推荐阅读