根据label
的字体来自适应高度和宽度:
首先注意设置label
的行数属性
label.numberOfLines = 0; //0表示无限制,默认为单行
然后创建一个CGSize size
对象,用来接收根据label
上的字体来调整的宽度和高度,
方法1:让label.text
调用方法 (注意该方法返回的是CGRect
类型,所以需要在方法后加一个.size
)
boundingRectWithSize:<#(CGSize)#> options:<#(NSStringDrawingOptions)#>
attributes:<#(NSDictionary *)#>
context:<#(NSStringDrawingContext *)#>
其中第一个参数表示label
的理论上的最大bounds
: 一般限制行宽,让行高无限大 CGSizeMake(300, MAXFLOAT)
第二个参数表示 绘制label
时的附加选项 ,有四种:
1,NSStringDrawingTruncatesLastVisibleLine //如果文本内容超过指定的矩形限制,文本将被截去,并在最后一个字符后加上省略号
2,NSStringDrawingUsesDeviceMetrics //计算布局时使用图元字形,而不是印刷字体
3,NSStringDrawingUsesFontLeading //计算行高时使用行距 (字体大小 + 行间距 = 行距)
4,NSStringDrawingUsesLineFragmentOrigin //绘制文本时使用 line fragment origin 而不是baseline origin.
一般选第四种.
第三个参数表示 属性 将label
上的字体font
存入字典,key
为NSFontAttributeName
例如: @{NSFontAttributeName: label.font}
第四个参数表示 上下文 包括一些信息,例如如何调整字间距以及缩放. 最终,该对象包含的信息将用于文本绘制. 该参数可为 nil
完整代码:
UILabel * label = [[UILabel alloc]init];
label.text = @"根据其上面的字体来调整自己的高度和宽度";
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:20];
CGSize size = [label.text boundingRectWithSize:CGSizeMake(100,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: label.font} context:nil].size;
label.frame = CGRectMake(0, 20, size.width, size.height);
[self.window addSubview:label];
方法2: 让label.text
调用方法 sizeWithAttributes:<#(NSDictionary *)#>
注意:该方法只能返回单行文本,也就是说不管你设置label.numberOfLines
为多少,都只返回一行,只是改变label宽度.这个方法可以在label
上的字体较少时使用
CGSize size = [label.text sizeWithAttributes:@{NSFontAttributeName: label.font}];
方法3: 让label
调用方法 sizeThatFits:<#(CGSize)#>
其中CGSize
参数表示label
理论上的最大size
,一般限制行宽,让行宽无限大
CGSize size = [label sizeThatFits:CGSizeMake(100, MAXFLOAT)];