label根据文本自适应高度

在xib约束好的控件 代码是改不了其frame 的  若要改变其高度或者宽度,可以找到其宽度或者高度的约束 将约束拖成属性然后代码改变其属性的contanst大小

self.carrierviewheight.constant = [selfsmsDetailLabHeightFortext:self.smsDetailLab.text];

self.carrierviewheight.constant =29 + self.carrierviewheight.constant;

这个适用于 其他控件(view)的高度随label的高度改变 来设置其高度


//自适应高度

- (CGFloat)smsDetailLabHeightFortext:(NSString *)textStr{

    CGRect bounds = [textStrboundingRectWithSize:CGSizeMake(UIScren mainScren】bounds.size.width - 160, 1000)options:NSStringDrawingUsesLineFragmentOriginattributes:@{NSFontAttributeName : [UIFontsystemFontOfSize:12]}context:nil];

    return bounds.size.height;

    

}

label的宽度一定要根据屏幕约束给宽度  不能给死的数值  因为设置宽度和字体大小  会影响返回的高度数值。

【UIScren mainScren】bounds.size.width 不要用self.view.frame.size.width


// 任意给个初始尺寸, 后面会重新赋值尺寸
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 0)];
[self.view addSubview:label];
NSString *text = @"**** **** **** 1234";
label.text = text;

CGSize size = [text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17.0]}];
// ceilf()向上取整函数, 只要大于1就取整数2. floor()向下取整函数, 只要小于2就取整数1.
CGSize size = CGSizeMake(ceilf(size.width), ceilf(size.height));
label.frame = CGRectMake(0, 0, size.width, size.height);
label自适应长度

你可能感兴趣的:(IOS)