我们在使用UILabel的时候,往往估计一个frame,然后根据这个估计的frame来定义内容
然而情况往往并不总是这么如意,很多情况下,我们需要根据文字的大小多少来定义label的长度和宽度,怎么办呢
下面依次讲一下长度和宽度的自适应
宽度自适应:
这里往往是根据文字多少来定义的label的长度,假设我们只需要显示一行字,但是这一行又希望是根据文字大小来定义其宽度,好吧!要求还蛮多的。
这样做吧
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 20, 27)];
label.font = [UIFont boldSystemFontOfSize:13.0f];
label.numberOfLines = 0;
label.textAlignment = NSTextAlignmentCenter;
NSString *str = @"高度不变获取宽度,获高度不变获";
[self autoWidthString:str withLabel:label];
//根据计算结果重新设置UILabel的尺寸
[label setFrame:CGRectMake(10, 100,[self autoWidthString:str withLabel:label]+20.00, 27)];
label.text = str;
[self.view addSubview:label];
- (CGFloat)autoWidthString:(NSString *)string withLabel:(UILabel *)label{
CGSize size = [string sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, label.frame.size.height)];
return size.width;
}
以上方法根据文字多少和大小来判断label可能的宽度,然后重设置其宽度。只需要调用自定义的方法即可。
之后便是具体问题具体解决了。
高度自适应:
我们根据文字的的多少和大小来自定义其高度
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 40, 20)];
label.font = [UIFont boldSystemFontOfSize:13.0f];
label.numberOfLines = 0;
label.textAlignment = NSTextAlignmentCenter;
NSString *str = @"高度不变获取宽度,获高度不变获dsjdjiswiewoeiweuwiuesidusudisuidusduisdsud";
[self autoHeightString:str withLabel:label];
[label setFrame:CGRectMake(10, 100,40, [self autoHeightString:str withLabel:label])];
label.text = str;
[self.view addSubview:label];
- (CGFloat)autoHeightString:(NSString *)string withLabel:(UILabel *)label{
CGSize size = [string sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT)];
return size.height;
}
区别是什么,各自看看吧
版权声明:本文为博主原创文章,未经博主允许不得转载。