【发布时间】:2016-09-15 22:55:31
【问题描述】:
我有以下代码来设置 UILabel:
let label = UILabel()
label.numberOfLines = 0
label.textAlignment = .center
label.lineBreakMode = .byWordWrapping
label.preferredMaxLayoutWidth = maxWidth
label.text = "String that is long enough to cause word wrap."
label.sizeToFit()
self.view.addSubview(label)
我需要的结果是标签将文本包裹起来,就像它到达label.preferredMaxLayoutWidth 时一样,然后实际上将其自身调整到足够宽以适合包裹的文本。这是一个图表来说明:
红色框的宽度等于label.preferredMaxLayoutWidth,这是我使用上面的代码得到的实际尺寸。
黑盒子是我想要的大小。
无论标签的大小是红色还是黑色,自动换行都是一样的。
那么,如何在保持当前自动换行的同时将标签的大小调整为尽可能小的宽度?
编辑:
虽然约束可能是通常的选择,但就我而言,我不认为这是因为我根据此标签的结果大小调整我的超级视图。
【问题讨论】:
-
您在寻找flush space吗? (参见添加刷新空间部分)
-
使用
NSString boundingRectWithSize:options:attributes:context:(或String的Swift等效项)来获得所需的字符串大小。 -
@paulvs 不,我认为这不是同一回事。
-
我通常通过在我的标签中添加前导和尾随约束来解决这个问题,这样如果它太长就会换行
-
@rmaddy 我认为你在正确的轨道上。我在 obj-c 线程中也看到了这一点,但由于某种原因很难找到 Swift 等价物。我正在进一步调查。