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

时间:2016-12-09 04:17:43

标签: ios swift swift3

我已经尝试了几个小时才找到我所拥有的UILabel中的boundingRect字符串,但似乎没有任何效果。

根据我的理解,boundingRect返回标签中实际文本的大小,而不是标签的大小或类似的大小。这是真的,对吧?

我有UILabel名为messageLabel,其中包含一些包含无限数量行的文字。

我现在的代码是:

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

不幸的是,这会为我的文字返回完全错误的尺寸。

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

2 个答案:

答案 0 :(得分:6)

使用:

let sizeToFit = CGSize(width: messageLabel.frame.size.width,
                       height: CGFloat.greatestFiniteMagnitude)
let textSize = messageLabel.sizeThatFits(sizeToFit)

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

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

答案 1 :(得分:1)

我想你需要试试这个

    let messageLabel = UILabel(frame: CGRect(x: 0, y: 0, width: _screenSize.width - 30, height: 5))
    messageLabel.font = self.txtDescription.font
    messageLabel.numberOfLines = 0
    messageLabel.text = "Your Massage"
    messageLabel.numberOfLines = 0
    messageLabel.sizeToFit()
    print(messageLabel.frame.size.height)

删除所有代码试试这个希望它会推迟