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

3

我的视图中有几个像这样的UILables:

enter image description here

红色的标签应该永远不会改变它们的字体大小。另外两个白色标签(50和50)应该按比例减小字体大小以适应内容。 我想要实现的是当任何一个白色标签变得太大时,其他标签也会开始缩小:

enter image description here

但是我得到了这个:

enter image description here

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


//获取标签字体大小 CGFloat fontSize = self.label.font.pointSize;将此字体大小用于第二个标签 - nithin
尝试使用TTTAttributedLabel - Pawan Rai
3个回答

1
最简单的方法如下:
  1. 确定标签1和标签2的最大可能宽度。
  2. 将两个标签的宽度相加。
  3. 将要设置在两个标签中的字符串连接起来。
  4. 获取适合于给定(组合)文本和组合宽度的字体大小。
  5. 现在计算上述识别出的字体大小的第一段文本的宽度,并将其分配给第一个标签。
  6. 根据其框架调整其余标签的框架。
  7. 类似地,确定第二个标签的宽度。
  8. 将上述导出的字体大小分配给两个标签。

1

一种简单的方法是通过手动调整字体大小,使用UILabelsizeToFit方法来计算其边界。

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;
}

更快的方法是使用 NSStringboundingRectWithSize: 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

我认为这个答案与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;

因此,尝试更改值和添加属性,您将获得所需的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接