在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自适应长度