liwei's blog

iOS7 UILabel高度自适应

ios6里面的UILabel调整高度的方法
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode
在iOS7里面已经废弃了,iOS7里面新的方法

-(CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary )attributes context:(NSStringDrawingContext )context NS_AVAILABLE_IOS(7_0);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
UILabel * testlable = [[UILabel alloc]initWithFrame:CGRectMake(10,20,200,20)];  
NSString * tstring =@"UILabel ios7 与ios7之前实现自适应撑高的方法,文本的内容长度不一,我们需要根据内容的多少来自动换行处理。在IOS7下要求font,与breakmode与之前设置的完全一致sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByCharWrapping";
testlable.numberOfLines =0;
testlable.font = [UIFont systemFontOfSize:14];
testlable.lineBreakMode =NSLineBreakByTruncatingTail;
testlable.text = tstring;
[testlable setBackgroundColor:[UIColor redColor]];
[self.view addSubview:testlable];
//高度估计文本大概要显示几行,宽度根据需求自己定义。 MAXFLOAT 可以算出具体要多高
CGSize size = CGSizeMake(300.f, MAXFLOAT);
//获取当前文本的属性
NSDictionary * tdic = [NSDictionary dictionaryWithObjectsAndKeys:testlable.font,NSFontAttributeName,nil];
//ios7方法,获取文本需要的size,限制宽度
CGSize actualsize =[tstring boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:tdic context:nil].size;
testlable.frame =CGRectMake(10,20, actualsize.width, actualsize.height);
```

`UILabel`的`NSLineBreakMode`的属性用作内容部分超出的显示
```objc
typedef NS_ENUM(NSInteger, NSLineBreakMode) { /* What to do with long lines */
NSLineBreakByWordWrapping = 0, /* 以单词为显示单位显示,default */
NSLineBreakByCharWrapping, /* 以字符为显示单位显示 */
NSLineBreakByClipping, /* 画到边界为止 */
NSLineBreakByTruncatingHead, /* 省略开始 "...wxyz" */
NSLineBreakByTruncatingTail, /* 省略尾部: "abcd..." */
NSLineBreakByTruncatingMiddle /* 省略中间: "ab...yz" */
} NS_ENUM_AVAILABLE_IOS(6_0);