iOS - 按比例更改UILabel字体大小

时间:2014-06-02 12:52:45

标签: ios xcode cocoa-touch autolayout

我的观点中有几个UILables,如下所示:

enter image description here

红色的那些不应该改变它们的字体大小。另外两个白色(50和50)应按比例减小字体大小以适应内容。 我想要实现的是当任何白色标签变成两个大的时候,另一个应该开始减小尺寸:

enter image description here

但我得到了这个:

enter image description here

如何使UILabels的字体大小按比例调整大小?

3 个答案:

答案 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)

最简单的方法如下:

  1. 确定标签1和标签2的最大可能宽度。
  2. 总结两个标签的宽度。
  3. 在两个标签中附加要设置的字符串。
  4. 获取适合给定(合并)文本的字体大小。
  5. 现在计算上面确定的字体大小的第一个文本的宽度,并将其指定给第一个标签。
  6. 根据框架调整其余标签框架。
  7. 同样标识第二个标签的宽度。
  8. 将以上派生的字体大小分配给两个标签。

答案 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;

因此,尝试更改值并添加属性,您将得到您想要的内容