【发布时间】:2021-04-11 04:07:34
【问题描述】:
这个问题甚至出现在故事板中。
UILabel 具有以下属性:
- numberOfLines = 0
- lineBreakMode = .byWordWrapping
- 约束:领先和落后 26 点到 superview;垂直居中。
- 自定义字体:中等 17 磅。
如您所见,第四个单词无法放入第一行,因此会出现布局错误的问题。如果我删除最后一个单词,则句子完全适合一行或说出第四个单词。如果在它之后添加一个单词会将它们都移动到下一行,这会留下很多空间。它应该尝试在一行中尽可能不中断或连字符来适应单词。但是很明显,即使单词可以容纳,也会产生空白。
您可以在新项目中重新创建它并观察问题。
【问题讨论】:
-
使用
label.sizeToFit()。它可能会有所帮助。 -
还是没有帮助...
-
Apple 设计了自动换行算法来避免“寡妇”——即避免将单个单词作为段落的最后一行。在谷歌上快速搜索
UILabel widows,你会发现很多讨论解释了它发生的原因,以及尝试解决它的各种方法。 -
嗨@DonMag 感谢您为我指明正确的方向。但是它与自动换行没有任何关系,因为它在所有换行模式下都表现出相同的行为。
-
如果你将它设置为
Character Wrap,它的行为会有所不同,但当然这会在单词中间中断,我确定你不想要。 Apple 在 iOS 10 或 11 左右改变了这一点(我记得)。如果它适用于您的目的,您可以使用不可滚动、不可编辑的UITextView代替您的UILabel-- 文本视图不避免寡妇和孤儿(我应该说“孤儿”开头,有区别)。
标签: ios swift autolayout uikit ios-autolayout