我已经尝试了几个小时才找到我所拥有的UILabel中的boundingRect
字符串,但似乎没有任何效果。
根据我的理解,boundingRect
返回标签中实际文本的大小,而不是标签的大小或类似的大小。这是真的,对吧?
我有UILabel
名为messageLabel
,其中包含一些包含无限数量行的文字。
我现在的代码是:
let labelRect = (message as NSString).boundingRect(with: messageLabel.frame.size,
options: .usesLineFragmentOrigin,
attributes: [NSFontAttributeName : messageLabel.font],
context: nil)
不幸的是,这会为我的文字返回完全错误的尺寸。
在多行UILabel中返回文本尺寸的正确方法是什么?
答案 0 :(得分:6)
使用:
let sizeToFit = CGSize(width: messageLabel.frame.size.width,
height: CGFloat.greatestFiniteMagnitude)
let textSize = messageLabel.sizeThatFits(sizeToFit)
无论如何,你做它的方式应该也可以(你可以在游乐场看到两个函数返回相同的大小): documentation
我已经在操场上添加了一个示例视图,因此您可以看到,标签有黑色边框,文本适合内部,并且小于标签。使用sizeToFit
和boundingRect
方法可以正确计算大小(但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)
删除所有代码试试这个希望它会推迟