iphone - 最小字体大小问题

标签 iphone ios uilabel

我设置了一个标签,标签中有一些文本。现在我想设置所有文本适合标签的字体。我使用最小字体大小,因为标签文本每天都在变化。但是突然就不行了。我做错了什么?

这是我的代码:

CGRect infoLabelRect = CGRectMake(10, 250, 260, 350);


UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect];
infoLabel.text = @"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla";
infoLabel.numberOfLines = 9;
infoLabel.font = [UIFont systemFontOfSize:17];
infoLabel.minimumFontSize = 12;
infoLabel.adjustsFontSizeToFitWidth = YES;
infoLabel.textColor = [UIColor whiteColor];
infoLabel.textAlignment = NSTextAlignmentCenter;
infoLabel.backgroundColor = [UIColor clearColor];
infoLabel.shadowColor = [UIColor blackColor];
infoLabel.shadowOffset = CGSizeMake(0, 1);
[infoLabel sizeToFit];

我试过 rmaddy sad 但没有显示任何文字。

这是我的代码,它不起作用。 有什么建议吗?

UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect];
    NSString *text = @"bla bla bla";
    UIFont *font = nil;
    CGFloat points = 17;
    CGFloat maxHeight = infoLabel.frame.size.height;
    CGFloat textHeight;
    do {
        font = [UIFont systemFontOfSize:points];
        CGSize size = CGSizeMake(infoLabelRect.size.width, 100000);
        CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping];
        textHeight = textSize.height;
        points -= 1;
    } while (textHeight > maxHeight);

    infoLabel.font = font;
    infoLabel.textColor = [UIColor whiteColor];
    infoLabel.textAlignment = NSTextAlignmentCenter;
    infoLabel.backgroundColor = [UIColor clearColor];
    infoLabel.shadowColor = [UIColor blackColor];
    infoLabel.shadowOffset = CGSizeMake(0, 1);
    [infoLabel sizeToFit];
    [contentView addSubview:infoLabel];

最佳答案

minimumFontSize 的使用只适用于一行的标签。多行或环绕标签不会尝试调整字体大小。

来自 minimumFontSize 的文档:

The default value for this property is 0.0. If you enable font adjustment for the label, you should always increase this value. This property is effective only when the numberOfLines property is set to 1.

一种解决方案是使用 NSString sizeWithFont:constrainedToSize:lineBreakMode: 方法来计算使标签的文本适合分配的空间所需的字体大小。

编辑:类似的东西应该可以工作(这没有经过测试,可能是拼写错误):

NSString *text = @"hello";
UIFont *font = nil;
CGFloat points = 17;
CGFloat maxHeight = infoLabel.frame.size.height;
CGFloat textHeight;
do {
    font = [UIFont systemFontOfSize:points];
    CGSize size = CGSizeMake(infoLabelRect.size.width, 100000);
    CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping];
    textHeight = textSize.height;
    points -= 1;
} while (textHeight > maxHeight);

infoLabel.font = font;

关于iphone - 最小字体大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673643/

相关文章:

iphone - 使用 NSMutablearray 数据更改 UILabel 中的文本

iphone - 动画 UILabel 字体大小变化

iphone - 为什么我无法将应用程序添加到 LionServer 的 ProfileManager 中

ios - Xcode 无法识别 iPod 设备

javascript - 滚动 y 但固定到 x - ios 中的错误

ios - ios中两个Label的圆角

iphone - Xcode 帮助 - 升级 iPad 的当前目标

iphone - 如何将货币字符串格式化为浮点值?

iphone - 从 url UIWEBVIEW +iphone 加载图像

ios - 为什么 NSManagedObject 实例不应该从一个线程传递到另一个线程?