如何使用UILabel的高度

时间:2017-10-16 22:21:05

标签: ios swift uitableview heightforrowatindexpath uitableviewautomaticdimension

关于堆栈溢出这个问题有很多答案,请知道我已经看了但是所有解决方案对我都不起作用。我在单元格中有两个UILabel,一个具有明确的宽度和高度,另一个是动态的,我将宽度约为< = 250,高度> = 50。我还将所有四个边距设置为内容视图,然后我尝试了以下两种方法来获取字符串的高度:

var context: NSStringDrawingContext = NSStringDrawingContext()
        context.minimumScaleFactor = 0.8
        cell?.body.text = msg.body
        var width: CGFloat = (cell?.body.frame.size.width)!
        width = ((UIScreen.main.bounds.width)/320)*width
        let size: CGSize = (cell?.body.text!.boundingRect(with: CGSize(width: width, height: 2000), options:NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSFontAttributeName: cell?.body.font], context: context).size)!
        print("size.height is \(size.height)")
        return size.height

和这个方法:

var optimalHeight : CGFloat
{
    get
    {
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: CGFloat.greatestFiniteMagnitude))
        //let label = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 0
        label.lineBreakMode = self.lineBreakMode
        label.font = self.font
        label.text = self.text

        label.sizeToFit()

        return label.frame.height
    }
}

并且对于这两个,所附的图像显示为UILabel,正如任何人都可以看到的那样,它是远离的。enter image description here

我也尝试在estimatedHeightForRowAt和heightForRowAt方法中实现UITableViewAutomaticDimension,但这不起作用,在两行之后,它不会进一步扩展。 我尝试在viewDidLoad()方法中调用estimatedRowHeight和rowHeight,如下所示:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300 //even went as far as using 800
同样的事情,在2行后停止扩张。 我还看到了一些关于实现这些方法的内容:

tableView.setNeedsLayout()
tableView.layoutIfNeeded()

但什么都没有!我查看了raywenderlich教程以及更多内容。我不知道我做错了什么。这可能是一个重复的问题,但我向你保证,我已经尝试了所有解决方案,但对我来说没有任何作用。请有人看看这个,看看我做错了什么?

这些是两个标签约束的屏幕截图 enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

所以我在后台线程中将我的dequeue包装在cellForRowAt中,这阻止了我的单元格变得动态。在我发表声明后,它完美无缺!如此浪费代码时间来修复从未破坏过的东西