如何使多行UILabel文本适合预定义的宽度而不包装中间单词

我有一个UILabel在Interface Builder中精心布局,具有适当的高度和宽度限制。 行数设置为4.包装设置为自动换行。 文本是“已检查”。 字体大小非常大,因此它只适合“CHECKE”而“D”在第二行。 编写“已检查”而不是“已检查”可使字体缩小(按预期),以便整个单词适合。 但是(文本是用户给出的并且可以预期用户写入完全大写的单词)具有大写单词,标签不会破坏它/缩小预期的字体。

你对我可能错过的内容有什么建议吗? 将单词大写(因此只有大写的第一个字母)确实有效,但不是客户想要的。

更新的问题

这个问题似乎与大写或小写文本无关。 我的问题可以通过回答以下问题来解决:

如何制作(理想情况下仅在Interface Builder的帮助下)UILabel文本缩小,试图在所有可用行中包含完整单词而不包装文本中间单词?

  • 如果文本“CHECKED”对于标签来说太宽(有超过1行可用),它应缩小字体大小而不是打破“D”并将单个字母包装到下一行。
  • 如果文本是“一个CHECKED两个”并且单个单词“CHECKED”对于标签来说已经太宽了(超过1行可用),它应该在所有单词之间断开缩小字体大小,以便“CHECKED”仍然适合中间线。

避免:

one CHECKE D two 

非常感谢你!

当单词大于该行时,自动换行不起作用。 如果它不适合这一行,它将不适合下一行。 (相同的单词,相同的大小,相同的行大小)。 为了使其合适,标签将开始在下一行放置字母。

如果您的标签上允许多行,操作系统将在调整字体大小之前尝试填充行。

我想你只是遇到了自动收缩的限制。

在Interface Builder中:

  • 添加一个Width: 230Height: 280的新UILabel
  • 将Font设置为System 44.0
  • 设置Line Break: Truncate Tail
  • 将自动Autoshrink: Minimum Font Scale0.15
  • 设置标签的文本以test CHECKED lines

现在,左右拖动标签右边缘的手柄……当它太窄时,单词CHECKED会突破到下一行。

CHECKED更改为已checked并执行相同操作。 你应该看到相同的行为。

现在,尝试上下拖动底部边缘。 无论是CHECKED还是checked ,您都会看到字体大小自动缩小。

所以……要做你想做的事情,你可能不得不跳过自动收缩而是做一些代码计算。

编辑:进一步了解发生了什么……

  • 从上面的值开始,但将标签的Height设置为170 – 只给它一个小的垂直填充。
  • 现在,拖动左边缘使其变窄。
  • 当你到达单词CHECKED的末尾并继续前进时,你会看到字体缩小,直到它变得足够小以至于它有空间包裹到第4行。

我想你需要一些代码才能得到你需要的东西。