您的位置:首页 > 移动开发 > IOS开发

ios开发系列之label自适应大小

2015-09-07 15:08 513 查看

根据
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)];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: