UILabel - 缩小文本而不是截断尾部

Posted

技术标签:

【中文标题】UILabel - 缩小文本而不是截断尾部【英文标题】:UILabel - shrink text instead of truncating tail 【发布时间】:2012-11-27 23:41:16 【问题描述】:

我有一个 UILabel 集,字体为系统粗体 14.0,最小字体大小为 12。 我希望标签填满 7 行,如果太大,将文本缩小到 12 像素,在这种情况下,它可能会超过 7 行,但仍然适合它的原始框架。

我尝试将行数设置为 7 和 0。无论哪种方式,文本都会以默认大小 (14) 填充 7 行并截断尾部。我怎样才能让文本缩小到 12px 以便我可以看到更多文本?

(我会发布更多代码,但大部分都是在 IB 中设置的)。

编辑:我将 Autoshrink 选项设置为“最小字体大小”,大小为 12。即使我将其设置为明显的 8,也不会发生收缩。

【问题讨论】:

您说您将最小字体大小设置为 12。您是如何做到的?你是通过 IB 在 UILabel 的“Autoshrink”检查器属性中做到这一点的吗? 【参考方案1】:

检查

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:

[labelText sizeWithFont:labelFont 
                  minFontSize:12.0 
                  actualFontSize:&returnFontSize 
                  forWidth:frame.size.width 
                  lineBreakMode:UILineBreakModeWordWrap];

更多详情check apple documentation for NSStringNSString 还有一些其他的便捷方法。

更新: 根据您的编辑,解决您的问题的方法是设置以下属性,

label.adjustsFontSizeToFitWidth = YES;

【讨论】:

这似乎是我应该能够在 IB 中做的事情。如果它不执行任何操作,为什么会有 Autoshrink 选项? 现在只看到您对问题的编辑。所以你想在IB中设置它。我以为您正在寻找以编程方式执行此操作。 @soleil,尝试设置您的label.adjustsFontSizeToFitWidth = YES; 试过了。没有不同。换行符需要设置什么? UILineBreakModeWordWrap 应该没问题。【参考方案2】:

您可以使用.adjustsFontSizeToFitWidth=YES 这将调整字体大小以适应标签的宽度。例如,如果您有一个带有numberOfLines=2 的标签并且文本太长,则标签的字体大小将被缩小以适合所有文本。

【讨论】:

那会做什么?你能解释一下这实际上意味着什么吗?【参考方案3】:

显然自动收缩、最小字体大小等仅适用于 1 行 UILabel。我找到了一个解决方案here,不过如果你能在 IB 或 UILabel API 中处理这个问题会很好。

【讨论】:

即以编程方式进行。类似于我的建议。但在您的情况下,您应该使用sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:,因为您想根据您的问题将最小字体设置为 12 像素。【参考方案4】:

对于仍在寻找的任何人,似乎字体大小不会缩放,除非lineBreak = "Truncate Tail" 我猜 UILabel 不知道它需要调整文本大小,直到它尝试截断。

所以要达到预期的效果,请使用以下内容(使用您希望的任何字体大小和行数):

Font Size: 14
Lines: 2
Automatically Adjusts Font Size: true
Auto Shrink: "Minimum font size"
Minimum Font Size: 8
Line Break: "Truncate Tail"

请记住,如果使用这种方法,即使在最小字体大小的情况下视图的文本过多,它最终也会使尾部椭圆化。

【讨论】:

以上是关于UILabel - 缩小文本而不是截断尾部的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell - 如何使右 UILabel 截断而不是左截断?

如何检查 UILabel 是不是被截断?

UILabel 自动收缩并在必要时使用 2 行

如何防止`UILabel`的文本顶部根据行数或截断而改变?

如何找出截断的 UILabel 文本的宽度

UILabel 和 UIButton - 截断标签而不是按钮