在IOS8上根据边框大小设置UILabel字体大小?

Posted

技术标签:

【中文标题】在IOS8上根据边框大小设置UILabel字体大小?【英文标题】:Set UILabel font size according to its frame size on IOS8? 【发布时间】:2015-08-10 08:52:39 【问题描述】:

我找到了很多具有“adjustsFontSizeToFitWidth”属性的解决方案,但这些解决方案都不适用于ios8。

我开发了一个响应式应用程序,标签字体大小必须根据屏幕宽度而变化......

我有:

    label = [[UILabel alloc] init];
    label.numberOfLines = 1;
    label.adjustsFontSizeToFitWidth = YES;
    label.font = [UIFont fontWithName:FONT_DIGITAL size:60];
    [label setMinimumScaleFactor:8.0/label.font.pointSize];
    label.textAlignment = NSTextAlignmentCenter;
    label.frame = CGRectMake(0, 0, self.width, self.height);
    label.text = @"TEXT";
    [self addSubview:valueLabel];

有人有解决办法吗?

【问题讨论】:

可能重复 - ***.com/questions/9059631/… 使用“adjustFontSizeToFit”类别方法。那应该可以解决问题。希望对您有所帮助。 【参考方案1】:

您应该如下图所示设置标签的自动收缩属性。

希望这会有所帮助。

【讨论】:

我不使用界面生成器。您知道如何以编程方式进行操作吗? 您是否将“numberOfLines”属性设置为 1 ? 看看这个:***.com/questions/9908334/…【参考方案2】:

以下答案是一种技巧(不是最佳解决方案),但它确实有效,因此如果您愿意,可以尝试:

- (void) sizeLabel: (UILabel *) label toRect: (CGRect) labelRect  

    // Set the frame of the label to the targeted rectangle
    label.frame = labelRect;

    // Try all font sizes from largest to smallest font size
    CGFloat fontSize = 16.0f;
    CGFloat minFontSize = 5.0f;

    // Fit label width wize
    CGSize constraintSize = CGSizeMake(label.frame.size.width, MAXFLOAT);

    do 
        // Set current font size
        label.font = [UIFont fontWithName:label.font.fontName size:fontSize];

        // Find label size for current font size
        CGRect textRect = [[label text] boundingRectWithSize:constraintSize
                                                     options:NSStringDrawingUsesLineFragmentOrigin
                                                  attributes:@NSFontAttributeName:label.font
                                                     context:nil];

        CGSize labelSize = textRect.size;

        // Done, if created label is within target size
        if( labelSize.height <= label.frame.size.height )
            break;

        // Decrease the font size and try again
        fontSize -= 1.0f;

     while (fontSize > minFontSize);

【讨论】:

以上是关于在IOS8上根据边框大小设置UILabel字体大小?的主要内容,如果未能解决你的问题,请参考以下文章

两个具有不同字体大小的自动布局 UILabel:文本顶部对齐

如何根据标签可用的高度调整 UILabel 字体大小

UILabel 最小字体大小阴影问题

根据自动布局更改 UILabel 中的字体大小(swift)

iOS 根据给定宽度自适应文字大小

UIlabel的字体自适应属性