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

来源:互联网 发布:linux 禁止访问外网 编辑:程序博客网 时间:2024/06/05 02:52

根据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存入字典,keyNSFontAttributeName 例如: @{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)];
0 0
原创粉丝点击