在UILabel swift中绑定多行字符串的rect

IHa*_*ion 5 ios swift swift3

我已经尝试了几个小时来找到boundingRect我所拥有的UILabel中的字符串,但似乎没有任何工作.

据我所知,boundingRect返回标签中实际文本的大小,而不是标签的大小或类似的大小.这是真的,对吗?

我有一个UILabel被调用的messageLabel包含一些文本,包含无限数量的行.

我现在的代码是这样的:

let labelRect = (message as NSString).boundingRect(with: messageLabel.frame.size, 
    options: .usesLineFragmentOrigin, 
    attributes: [NSFontAttributeName : messageLabel.font], 
    context: nil)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这为我的文本返回了完全错误的维度.

在多行UILabel中返回文本尺寸的正确方法是什么?

Łuk*_*uła 6

使用:

let sizeToFit = CGSize(width: messageLabel.frame.size.width,
                       height: CGFloat.greatestFiniteMagnitude)
let textSize = messageLabel.sizeThatFits(sizeToFit)
Run Code Online (Sandbox Code Playgroud)

无论如何,你做它的方式也应该工作(你可以在游乐场看到两个函数返回相同的大小): 操场

我已经在操场上添加了一个示例视图,因此您可以看到,标签有黑色边框,文本适合内部,并且小于标签.使用两者sizeToFitboundingRect方法都可以正确计算大小(但boundingRect不返回舍入值).我使用这个计算的大小在文本下创建一个绿色背景视图,它适合它.