我正在尝试捕获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
    }
}


它肯定会做出明智的尝试,因为它会返回某种相对较大的动态数字,但该数字始终很短且从不准确。

我如何提取身高有什么明显的不当之处?有没有更好的方法来执行此操作?



根据Matt的回应,我更新了对标签的测量方式,如下所示:

// 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比字符串高。您没有考虑到这一点。

关于ios - 我返回的UILabel的高度永远都不准确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36182863/

10-13 03:56