我的观点中有几个UILables
,如下所示:
红色的那些不应该改变它们的字体大小。另外两个白色(50和50)应按比例减小字体大小以适应内容。 我想要实现的是当任何白色标签变成两个大的时候,另一个应该开始减小尺寸:
但我得到了这个:
如何使UILabels的字体大小按比例调整大小?
答案 0 :(得分:1)
一种简单的方法是使用UILabel's
sizeToFit
方法手动调整fontSize来计算其边界。
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's
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];
答案 1 :(得分:1)
最简单的方法如下:
答案 2 :(得分:1)
我预计答案会在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;
因此,尝试更改值并添加属性,您将得到您想要的内容