我对UILabel高度的返回从来都不准确



我试图捕获UILabel的高度,以便可以动态设置它的单元格的高度,但它永远不会返回正确的高度,而且实际上,我的内容总是被截断并附加省略号。

我的代码:

let height   = String(page.valueForKey(subject)).heightWithConstrainedWidth(self.view.frame.width - 30, font: UIFont.systemFontOfSize(16.0))
// and at the bottom of my class..
// Custom functions
extension String {
    func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: CGFloat.max)
        let boundingBox = self.boundingRectWithSize(constraintRect, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)
        return boundingBox.height
    }
}

它肯定是一个勇敢的尝试,因为它返回了某种相对较大的动态数字,但这个数字总是很短,而且永远不准确。

我提取身高的方式有什么明显不恰当的地方吗?有更好的方法吗?


根据马特的回复,我更新了标签的测量方式:

// Custom functions
extension String {
    func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat {
        let label:UILabel = UILabel(frame: CGRectMake(0,0,width, CGFloat.max))
        label.numberOfLines = 0
        label.lineBreakMode = .ByWordWrapping
        label.font = font
        label.text = self
        label.sizeToFit()
        return label.frame.height
    }
}

但是它仍然不够大。。

您的代码所做的一切都很好。问题只是标签不是字符串。你正在寻找一根绳子的高度。这不是你想做的。你想找到一个标签的高度!毕竟,UILabel不仅仅包含字符串。UILabel比字符串高。你没有考虑到这一点。

最新更新