自动缩小的 UIButton 文本之前的换行符

Posted

技术标签:

【中文标题】自动缩小的 UIButton 文本之前的换行符【英文标题】:Newline before auto-shrunken UIButton text 【发布时间】:2016-11-29 15:35:13 【问题描述】:

背景

我正在创建一个应用程序,在它的故事板中我有一个UIButton 元素。我需要 UIButton 的文本自动收缩,因为它会根据视图的大小进行缩放。在情节提要中,它具有以下属性:

在我的代码里面,它说:

guard button.titleLabel != nil else 
    throw AutoshrinkError.noTitleLabel(button: button)


button.titleLabel!.adjustsFontSizeToFitWidth = true
button.titleLabel!.numberOfLines = 0
button.titleLabel!.lineBreakMode = NSLineBreakMode.byTruncatingTail
button.titleLabel!.baselineAdjustment = UIBaselineAdjustment.alignBaselines

我知道guard 语句通过(即它下面的代码运行)。

问题

问题是通过上述设置,我的按钮最终看起来像这样:

文本前有一个换行符。

我尝试以多种方式编辑我的代码,包括将button.titleLabel!.numberOfLines 设置为1,将button.titleLabel!.lineBreakMode 设置为NSLineBreakMode.byClipping,或者删除关于button.titleLabel!.baselineAdjustment 的行。这些变化都无济于事。相反,它们最终会导致 更多 问题,例如文本根本没有缩小。

如果有人知道如何防止这种换行场景发生,我将不胜感激。

提前致谢!

编辑 1

UIButton 的约束是:

woodgrain 是用作背景图像的UIImageView

【问题讨论】:

您对该按钮使用的约束是什么?当您使用另一种字体并将 Button 的类型设置为 custom 而不是 system 时,您是否看到同样的错误? @noir_eagle 我编辑了问题以添加约束(请参阅“编辑 1”)。至于UIButtonType,我尝试了.custom.system,结果完全相同。 我无法重现该问题,因此我需要更多信息。你在哪里设置按钮的cornerRadius?那么字体呢,你有没有尝试过使用另一种字体?问题显然不是标签前面的新行,它以某种方式放错了titleLabel,或者拉伸了高度。你试过不使用adjustsFontSizeToFitWidth吗? 【参考方案1】:

我想通了!我所要做的就是添加一个简单的行:

button.titleLabel!.baselineAdjustment = UIBaselineAdjustment.alignCenters

我想到了将baselineAdjustment 由@rintaro 调整为this answer。

现在我的UIButton 看起来像这样:

【讨论】:

以上是关于自动缩小的 UIButton 文本之前的换行符的主要内容,如果未能解决你的问题,请参考以下文章

如何调整 UIButton 的大小以适应文本而不使其比屏幕更宽?

beyond compare工具的设置,beyond compare工具比较文本时怎么设置自动换行,不喜欢默认的拉动滚动条来看

[HTML]TD中的文本自动换行

如何用css控制文本自动换行 ?

在多行 UIButton 的文本中查找字母的运行时位置

notepad++为啥每次粘贴都会自动换行