如何根据自动收缩的标签为多个标签设置相同的字体比例?

Posted

技术标签:

【中文标题】如何根据自动收缩的标签为多个标签设置相同的字体比例?【英文标题】:How can I set same font-scale for multiple labels depending on which one is autoshrinked? 【发布时间】:2014-11-15 03:06:55 【问题描述】:

我有 4 个标签视图,其中一个应该显示大数值并设置为自动收缩。

我的要求是在自动调整以适合其内容后,将此标签具有的相同字体缩放或大小设置为其他标签,以便文本内容在整个过程中看起来一致。

设置最小比例因子对其他标签没有帮助,因为它们的内容在帧限制内。

【问题讨论】:

【参考方案1】:

没有办法直接执行此操作,因为查询已缩小文本以适应标签的字体,仍会显示原始字体大小。您必须通过迭代越来越小的字体大小来做到这一点,直到找到适合您的标签的大小,然后使用该字体大小来调整您的其他标签。在我下面的例子中,labelLong 是文本可以缩小的,labelShort 是文本不需要缩小的。

-(void)updateFont 
    NSStringDrawingContext *ctx = [NSStringDrawingContext new];
    ctx.minimumScaleFactor = 1.0;
    UIFont *startingFont = self.labelLong.font;
    NSString *fontName = startingFont.fontName;
    CGFloat startingSize = startingFont.pointSize;
    for (float i=startingSize*10; i>1; i--)  // multiply by 10 so we can adjust font by tenths of a point with each iteration
        UIFont *font = [UIFont fontWithName:fontName size:i/10];
        CGRect textRect = [self.labelLong.text boundingRectWithSize:self.labelLong.frame.size options:NSStringDrawingTruncatesLastVisibleLine attributes:@NSFontAttributeName:font context:ctx];
        if (textRect.size.width <= [self.labelLong textRectForBounds:self.labelLong.bounds limitedToNumberOfLines:1].size.width) 
            NSLog(@"Font size is: %f", i/10);
            self.labelShort.font = [UIFont fontWithName:fontName size:i/10];
            break;
        
    

【讨论】:

按预期工作!非常感谢 轻微修改 - 在长标签向下移动时也更新调整后的字体

以上是关于如何根据自动收缩的标签为多个标签设置相同的字体比例?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用一个情节提要为所有 iPhone 设备设计自动布局约束?

UILabel 自动收缩不起作用

如何根据字符串长度和标签大小调整标签的字体大小

如何在不使用自动收缩的情况下使用不同 iPhone 尺寸的自动布局更改字体大小 [重复]

单行 UILabel 拥抱不适用于自动收缩

圆环图标签位置