我目前有一个 UILabel
:
factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];
在我的iOS应用程序的整个生命周期中, factLabel
获得了许多不同的值 . 有些有多个句子,有些只有5或6个单词 .
如何设置 UILabel
以便字体大小发生变化,以便文本始终适合我定义的边界?
12 回答
单线:
上面的代码会将文本的字体大小调整为(例如)
8
,尝试在标签中插入文本 .numberOfLines = 1
是强制性的 .多行:
对于
numberOfLines > 1
,有一种方法可以通过NSString's UIKit addition方法计算出最终文本的大小,例如:之后,您可以使用结果
lLabelSize
重新调整标签大小(假设您只更改标签的高度):iOS6
单线:
从iOS6开始,
minimumFontSize
已被弃用 . 这条线可以改为:
iOS7
多行:
从iOS7开始,
sizeWithFont
已弃用 . 多线案例减少为:minimumFontSize
已被iOS 6弃用 . 您可以使用minimumScaleFactor
.这将根据标签和文本的宽度来处理您的字体大小 .
根据@Eyal Ben Dov的回答,您可能希望创建一个类别,以便在您的其他应用程序中灵活使用 .
Obs . :我已经更新了他的代码以与iOS 7兼容
-Header file
-Implementation file
-Usage
干杯
这是2015年 . 我不得不去寻找一篇博文,解释如何使用Swift为最新版本的iOS和XCode做到这一点,以便它可以使用多行 .
将“自动收缩”设置为“最小字体大小” .
将字体设置为最大的理想字体大小(我选择了20)
将“换行符”从“自动换行”更改为“截断尾巴” .
资料来源:http://beckyhansmeyer.com/2015/04/09/autoshrinking-text-in-a-multiline-uilabel/
Single line - 有两种方法,你可以简单地改变 .
1-务实 (Swift 3)
只需添加以下代码即可
2 - 使用UILabel属性检查器
Swift版本:
这是UILabel的Swift扩展 . 它运行二进制搜索算法,根据标签边界的宽度和高度调整字体大小 . 经测试可与iOS 9和autolayout配合使用 .
USAGE: 其中
<label>
是您需要调整字体大小的预定义UILabel默认情况下,此函数在5pt和300pt字体大小的范围内搜索,并将字体设置为在边界内适合其文本"perfectly"(准确度在1.0pt内) . 您可以定义参数,以便它以下列方式在 0.1pts 内准确地在 1pt 和 label's current font size 之间进行搜索:
Copy/Paste the following code into your file
NOTE: 每个
layoutIfNeeded()
电话都可以自行决定删除它有点不复杂,但这应该工作,例如,假设您想要将您的uilabel限制为120x120,最大字体大小为28:
只需将sizeToFit消息发送到UITextView即可 . 它将调整自己的高度以适应其文本 . 它不会改变自己的宽度或原点 .
Swift 2.0 Version:
此解决方案适用于多行:
在关注了几篇文章,并且需要一个能够自动缩放文本并将行数调整到最适合给定标签大小的函数之后,我自己编写了一个函数 . (即,一根短线很适合在一条线上并使用大量的标签框架,而一根长线会自动分割成2或3条线并相应地调整尺寸)
随意重复使用并根据需要进行调整 . 确保在
viewDidLayoutSubviews
完成后调用它,以便设置初始标签框 .以下是实现动画字体大小更改的UILabel子类的填充代码: