我的视图中有几个像这样的UILables
:
红色的标签应该永远不会改变它们的字体大小。另外两个白色标签(50和50)应该按比例减小字体大小以适应内容。 我想要实现的是当任何一个白色标签变得太大时,其他标签也会开始缩小:
但是我得到了这个:
如何使我的UILabel的字体大小按比例调整?
我的视图中有几个像这样的UILables
:
红色的标签应该永远不会改变它们的字体大小。另外两个白色标签(50和50)应该按比例减小字体大小以适应内容。 我想要实现的是当任何一个白色标签变得太大时,其他标签也会开始缩小:
但是我得到了这个:
如何使我的UILabel的字体大小按比例调整?
一种简单的方法是通过手动调整字体大小,使用UILabel
的sizeToFit
方法来计算其边界。
int fontSize = MAX_FONTSIZE;
BOOL fontSizeNeedsToBeAdjusted = NO;
CGRect originalLabelFrame1 = label1.frame;
CGRect originalLabelFrame2 = label2.frame;
while(fontSizeNeedsToBeAdjusted && fontSize>MIN_FONTSIZE){
label1.frame = originalLabelFrame1;
label1.font = [UIFont systemFontOfSize:fontSize];
[label1 sizeToFit];
label2.frame = originalLabelFrame2;
label2.font = [UIFont systemFontOfSize:fontSize];
[label2 sizeToFit];
if(CGRectGetWidth(label1.frame)>CGRectGetWidth(originalLaeblFrame1) || CGRectGetHeight(label1.frame)>CGRectGetHeight(originalLaeblFrame1))
|| CGRectGetWidth(label2.frame)>CGRectGetWidth(originalLaeblFrame2) || CGRectGetHeight(label2.frame)>CGRectGetHeight(originalLaeblFrame2)){
fontSizeNeedsToBeAdjusted = YES;
fontSize--;
}else
fontSizeNeedsToBeAdjusted = NO;
}
NSString
的 boundingRectWithSize: options:attributes:context:
方法来计算大小:NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontofSize:fontSize]};
// NSString class method: boundingRectWithSize:options:attributes:context is
// available only on ios7.0 sdk.
CGRect bounds = [label1.text boundingRectWithSize:CGSizeMake(CGRectGetWidth(label1.frame), MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
我认为这个答案与NSMutableAttributedString
有关,所以我进行了一些小实验。
NSString *quantity = @"123456";
NSString *metrics =@"m2";
NSString *quantity2 = @"50";
NSString *metrics2 =@"pk";
NSString *separator = @" / ";
NSMutableAttributedString *fullString = [[NSMutableAttributedString alloc] initWithString:
[NSString stringWithFormat:@"%@%@%@%@%@",quantity,metrics,separator,quantity2,metrics2]];
[fullString addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:25.0]
range:NSMakeRange(quantity.length+metrics.length, separator.length)];
[fullString addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:12.0]
range:NSMakeRange(fullString.length-metrics.length, metrics.length)];
_lblTitle.attributedText = fullString;
因此,尝试更改值和添加属性,您将获得所需的结果。