根据UILabel的内容,动态调整UILabel的高度
/**
UILabel有一个属性:numberOfLines
设置这个属性的值为 0( 即:numberOfLines=0 ),UILabel就可以自动换行了
但是,我们并不确定正确显示UILabel中的内容,实际需要的高度
所以,我们就需要用到NSString的一个方法:boundingRectWithSize:<#(CGSize)#> options:<#(NSStringDrawingOptions)#> attributes:<#(NSDictionary *)#> context:(NSStringDrawingContext *)
用这个方法获取正常显示文本框的内容,实际需要的高度
注:这个方法会返回一个CGRect对象,我们只需要一个height,用来设置UILabel的高度
这个方法有 4 个参数:
1、boundingRectWithSize:<#(CGSize)#>:width值传我们需要测试的UILabel的宽度,因为高度不确定,所以height先用 MAXFLOAT
2、options:<#(NSStringDrawingOptions)#>://这个选项是一个枚举类型,选项如下:
typedef NS_ENUM(NSInteger, NSStringDrawingOptions) {
NSStringDrawingTruncatesLastVisibleLine = 1 << 5, //计算文本尺寸时将以每个字或字形为单位来计算
NSStringDrawingUsesLineFragmentOrigin = 1 << 0, //整个文本将以每行组成的矩形为单位计算整个文本的尺寸
NSStringDrawingUsesFontLeading = 1 << 1, //以字体间的行距(leading,行距:从一行文字的底部到另一行文字底部的间距。)来计算
NSStringDrawingUsesDeviceMetrics = 1 << 3, //计算文本尺寸时将以每个字或字形为单位来计算
} NS_ENUM_AVAILABLE_IOS(6_0);
//我们这里用到的就是 NSStringDrawingUsesLineFragmentOrigin 和NSStringDrawingUsesFontLeading
3、attributes:<#(NSDictionary *)#>://这里填写字体的属性,我们传入字体的大小就可以了(例:@{ NSFontAttributeName: UILabel的font属性 })
4、context:(NSStringDrawingContext *):置为 nil 就行了
*/
//**********下面是我做的一个demo**********
//第一步:定义一个全局的UILabel
@property(nonatomic,strong) UILabel *testLabel;
//第二步:用懒加载的方式初始化
- (UILabel *)testLabel {
if (_testLabel) {
_testLabel = [UILabel new];
_testLabel.frame = CGRectMake(10, 200, 300, 30);
_testLabel.font = [UIFont systemFontOfSize:18];
_testLabel.text = @"我是label!";
_testLabel.backgroundColor = [UIColor grayColor];
//设置为自动换行模式
_testLabel.numberOfLines=0;
}
return _testLabel;
}
//第三步:在ViewDidLoad中
//1、添加此控件
[self.view addSubview:self.testLabel];
//现在可以运行看下效果
//2、更改testLabel的内容
_testLabel.text=@"我是用来测试的文本,我的任务是测试自动换行是否成功!我是用来测试的文本,我的任务是测试自动换行是否成功!我是用来测试的文本,我的任务是测试自动换行是否成功!";
//现在再次运行我们会发现文本内容增加了,但textLabel的高度需要调整
//第四步:我们写一个方法,用来返回新内容应该需要的高度
/**
这个方法需要 3 个参数
1、string:文本内容
2、width:每一行的宽度
3、字体大小
*/
- (CGFloat)autoSizeWithString:(NSString *)string Width:(CGFloat)width Font:(UIFont*)font {
//限制范围
CGSize boundRectSize = CGSizeMake(width, MAXFLOAT);
//字体(字典)
NSDictionary *fontDict = @{ NSFontAttributeName: font };
//调用方法,得到高度
CGFloat newFloat = [string boundingRectWithSize:boundRectSize
options: NSStringDrawingUsesLineFragmentOrigin
| NSStringDrawingUsesFontLeading
attributes:fontDict context:nil].size.height;
return newFloat;
}
//第五步:在viewDidLoad中调用这个方法得到新内容实际需要的高度
CGRect rect=_testLabel.frame;
rect.size.height=[self autoSizeWithString:_testLabel.text Width:200 Font:_testLabel.font];
_testLabel.frame = rect;
//现在再次运行,看下效果,是不是已经可以啦!