iOS开发--根据label内容动态设定label大小

来源:互联网 发布:淘宝店代运营可靠吗 编辑:程序博客网 时间:2024/06/05 04:52

两个方法:

- (CGSize)sizeWithAttributes:(nullable NSDictionary<NSString *, id> *)attrs NS_AVAILABLE(10_0, 7_0);
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);

eg1:

- (void)viewDidLoad {    [super viewDidLoad];    NSString *str = @"原纱央莉选择了加入AV界为自己谋求稳定的工作,并且选择了SOD作为自己的东家。在2008年11月25日sabra杂志里当时原纱央莉连载的专栏“SAORIchewBE”里公开了要加入AV的事情。";    //设置按照什么字体大小来计算,你可以添加其他的属性    NSDictionary *attrs = @{NSFontAttributeName : [UIFont systemFontOfSize:25]};    //label1    UILabel *label1 = [[UILabel alloc]init];    label1.backgroundColor = [UIColor yellowColor];    CGSize size1 = [str sizeWithAttributes:attrs];//方法1,计算大小,但是只有一行    label1.frame = (CGRect){{50,50},size1};    label1.text = str;    [self.view addSubview:label1];    //label2    UILabel *label2 = [[UILabel alloc]init];    label2.backgroundColor = [UIColor purpleColor];    CGSize size2 = CGSizeMake(200, MAXFLOAT);//给出一个限制size,设定宽度200,高度可变    CGRect rect2 = [str boundingRectWithSize:size2                                     options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs                                     context:nil];//方法2,计算大小,但是会根据size2来限制    CGFloat label2_H = rect2.size.height;    label2.frame = CGRectMake(50, 100, size2.width, label2_H);    [self.view addSubview:label2];    label2.text = str;    label2.numberOfLines = 0;    //label1和label2都没有设置字体的大小,所以你会感觉label有很多空白,看label3    //label3设置了字体大小,因为默认的字体大小小于25,所以label1和label2都有空白,现在设置label3的字体和计算依据的字体一样大,看效果    UILabel *label3 = [[UILabel alloc]init];    label3.backgroundColor = [UIColor grayColor];    CGSize size3 = CGSizeMake(200, MAXFLOAT);    CGRect rect3 = [str boundingRectWithSize:size2                                     options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs                                     context:nil];//方法2    CGFloat label3_H = rect3.size.height;    label3.frame = CGRectMake(150, 300, size3.width, label3_H);    [self.view addSubview:label3];    label3.font = [UIFont systemFontOfSize:25];//相比label2多了这句代码    label3.text = str;    label3.numberOfLines = 0;}





1 0