我有以下代码来设置 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
,这是我通过上面的代码获得的实际大小。
黑盒子是我想要的大小。
无论标签的大小是红色还是黑色,自动换行都是一样的。
那么,如何在保持当前自动换行的同时将标签调整为尽可能小的宽度?
编辑:
虽然约束可能是通常的选择,但在我的例子中,我不认为这是因为我正在根据此标签的结果大小来调整我的 super View 的大小。
最佳答案
好吧,我刚刚弄明白了。 @rmaddy 在上面的问题评论中是正确的。在问这个问题之前,我已经看到了 boundingRectWithSize:options:attributes:context:
,但在快速解决问题时遇到了问题。但现在我明白了。这是我更新的代码:
让标签 = UILabel()
let text = "String that is long enough to cause word wrap."
let rect = text.boundingRect(with: CGSize(width: maxDesiredWidth, height:CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: nil, context: nil)
label.numberOfLines = 0
label.textAlignment = .center
label.lineBreakMode = .byWordWrapping
label.frame = rect
label.text = text
label.sizeToFit()
self.view.addSubview(label)
关于ios - 设置为自动换行时如何获取 UILabel 文本的实际宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521530/