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 NSString
。 NSString
还有一些其他的便捷方法。
更新: 根据您的编辑,解决您的问题的方法是设置以下属性,
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 - 缩小文本而不是截断尾部的主要内容,如果未能解决你的问题,请参考以下文章