使用 adjustsFontSizeToFitWidth 时 UILabel 文本的按钮被切断

Kqt*_*qtr 4 ios autolayout swift ios-autolayout

当我的 UILabel 的字体大小被调整以适应标签的宽度时,文本的底部被切断。这是调试视图的屏幕截图:

在此处输入图片说明

UILabel 具有以下特点:

  • 系统字体(半粗体,36pt)
  • 行数= 1
  • 基线调整= .alignCenters
  • translatesAutoresizingMaskIntoConstraints = false
  • auto-layout 约束:top、left、right pinned 是 pinned,没有底部或高度约束
  • AdjustsFontSizeToFitWidth = true, minimumScaleFactor = 0.1
  • 默认无文本,初始化后给出文本
  • lineBreakMode = .byWordWrapping

附加元素:

  • 这仅在字体大小确实减小时发生。如果文本较短且适合原始字体大小,则不会被截断。
  • 如果我手动更改字体大小以使文本适合,它不会被切断。只有当它自动调整到该字体大小时才会发生。

不起作用的事情:

  • 使用.attributedText而不是.text属性
  • 调用 sizeToFits、setNeedsLayout()/layoutIfNeeded()
  • 默认为标签设置长文本
  • 尝试基线调整的所有设置(设置为 .none 有效,请参阅答案)

(在我输入这个问题时,我再次尝试更改基线调整设置以确认它不起作用,这次它起作用了。请参阅答案。)

Kqt*_*qtr 8

当我输入答案并返回我尝试过的每个设置时,将标签的基线调整设置为.none解决了这个问题。

label.baselineAdjustment = .none
Run Code Online (Sandbox Code Playgroud)

仅供参考,以下文档摘录让我感到困惑:

UILabel 基线调整的文档中:

此属性的默认值是alignBaselines

UIBaselineAdjustment的文档中:

.none:这是默认调整。

如果有人可以在评论中确认,我会很感兴趣,但从我的实验来看.none似乎不是UILabel默认基线调整。我必须专门将基线调整设置为 .none 以修复问题中提到的错误。