-1

堆栈溢出问题已经有这么多的答案,请知道我看过,但所有的解决方案都不适合我。我在单元格中有两个UILabels,一个有确定的宽度和高度,另一个是动态的,我把宽度大约为< = 250,高度> = 50。我还设置所有四个边距内容视图,然后我尝试以下两种方法来获取字符串的高度:如何使用UILabel的高度正确地增加UITableViewCell

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,但是这行不通,两行之后,它不会进一步扩展。 我打过电话estimatedRowHeight和rowHeight在viewDidLoad中()方法是这样的:

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 300 //even went as far as using 800 

同样的事情,停止后2线扩大。 我也看到了一些关于实现这些方法的东西:

tableView.setNeedsLayout() 
tableView.layoutIfNeeded() 

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

这些都是制约的截图两个标签 enter image description hereenter image description here

+2

为什么不使用自动布局?这就是你正在省略的“正确”部分。此功能(单元格自动将其内容自动调整为其内容)是关于autolayout_的_all。 – matt

+0

@matt你是什么意思?我最近开始学习快速,所以请你进一步解释一下?这篇文章(https://www.appcoda.com/auto-layout-guide/)只是将自动布局解释为具有约束条件,而我已经有了约束条件?还是有更多的呢? – Aria

+0

要使自动行高度起作用,必须通过视图和约束从单元格顶部到底部有一条路径。标签是单元格中唯一的东西吗?它是否受到顶部和底部的限制? – Connor

回答

0

所以我裹在后台线程我在​​cellForRowAt离队,这阻止我的细胞是动态的。在我发表了这个声明之后,它完美地工作了!这样浪费代码时间来修复从未破解的东西