【问题标题】:Bottom of UILabel text cut off when using adjustsFontSizeToFitWidth使用 adjustsFontSizeToFitWidth 时 UILabel 文本的底部被截断
【发布时间】:2018-10-02 11:49:26
【问题描述】:

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

UILabel 具有以下特点:

  • 系统字体(半粗体,36pt)
  • numberOfLines = 1
  • 基线调整 = .alignCenters
  • translatesAutoresizingMaskIntoConstraints = false
  • 自动布局约束:顶、左、右置顶,无底或高约束
  • adjustsFontSizeToFitWidth = true, minimumScaleFactor = 0.1
  • 默认无文字,初始化后给出文字
  • lineBreakMode = .byWordWrapping

附加元素:

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

没用的东西:

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

(当我输入这个问题时,我尝试再次更改 baselineAdjustment 设置以确认它不起作用,这一次它起作用了。查看答案。)

【问题讨论】:

  • "bottom/height is free" 所以没有没有高度限制,对吗?
  • @AhmadF 正确(我正在编辑以澄清),但我在输入我的问题时找到了该错误的修复。检查下面的答案。感谢您的帮助!
  • 您使用的是哪个字体系列?使用 Arial 或任何常见字体并测试并检查是否出现相同的情况
  • @AbdulRehmanWarraich 谢谢,但可以修复我发布的答案 :-) 谢谢

标签: ios swift autolayout


【解决方案1】:

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

label.baselineAdjustment = .none

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

来自UILabel baselineAdjustement的文档:

此属性的默认值为alignBaselines。

来自UIBaselineAdjustment的文档:

.none:这是默认调整。

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

【讨论】:

  • 是的,baselinedAdjustment的默认值为.alignBaselines
  • 如何在自定义 UILabel 中覆盖 UILabel 的 baselineAdjustment 属性?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2016-07-10
  • 2012-05-09
相关资源
最近更新 更多