【问题标题】:How to prevent UILabel from glueing last 'short' word to the previous one?如何防止 UILabel 将最后一个“短”字粘到前一个?
【发布时间】:2019-04-16 15:41:13
【问题描述】:

我注意到UILabel 不公平地换行。它将最后一个短词(10 个或更少字符)粘到前一个词上,并将它们一起移动到第二行。

检查插图:

标签#1:第一行有足够的空间放置单词“seven”(如预期的那样)。

标签#2:又添加了一个“短”字,并且字“七”移到了第二行(我想避免这种行为)。

标签#3:最后一个单词包含 10 个字符,标签仍将其视为“短”。

标签#4:最后一个单词包含 11 个字符,现在与回到第一行的单词“seven”分离(如预期的那样)。

看起来,Apple 正在与“寡妇”作斗争,并通过这种行为强制实现“良好的排版”。但有时我不需要这样的照顾。那么,如何防止UILabel 将最后一句话粘在前一个单词上呢?

【问题讨论】:

  • 一个非常小的观察:我可能建议您将“UPD”作为单独的答案发布,而不是作为对您问题的编辑。见Can I answer my own question?
  • 这是在 iOS 11 中完成的,以防止出现孤立词。您可以使用下面的答案关闭此行为,也可以使用 UITextview 或 CATextLayer 并手动计算字体大小。有了这些,包装将按预期进行。

标签: ios uilabel


【解决方案1】:

通过将NSAllowsDefaultLineBreakStrategy 设置为false 进行修复。

【讨论】:

  • 这似乎在 iOS 13 中不再起作用(只是在模拟器中注意到,我还没有做很多测试)。
【解决方案2】:

iOS/macOS 上的大多数字体都是成比例的,字体系统试图使用良好的排版标准。因此,字符和/或排版将根据周围的其他字符、行长等更改间距。为了获得更可预测的文本显示,请使用具有固定间距的字体,如 Monaco 或其他固定间距字体。这将产生更可预测的显示。

以下是 Apple 的排版指南:

https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/typography/

【讨论】:

猜你喜欢
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
相关资源
最近更新 更多