我几个小时来一直在搞乱这些限制,无法解决这个问题。 我需要在文本视图中使用动态单元格高度。
正如你可以看到它重叠我的时间戳。截至目前,我对时间戳有零(无)限制。我已经尝试了所有可能的组合来完成这项工作,我无法得到它。
也在使用
override func viewDidLoad() {
super.viewDidLoad()
//TableView Cell word wrap (Dynamic Text)
self.tableView.dataSource = self
self.tableView.delegate = self
self.tableView.estimatedRowHeight = 78
self.tableView.rowHeight = UITableViewAutomaticDimension
答案 0 :(得分:5)
适用于Swift 3.1,4.0
通过设置约束和UITableViewAutomaticDimensions
。
第1步:
第2步:
第3步:
第4步:
删除UITextView
第5步:
添加以下代码,
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
注意:强>
如果您有UILabel
,请从上面的解决方案和UITextView
替换UILabel
到label.numberOfLines = 0
。
<强>输出:强>
答案 1 :(得分:1)
如果您的单元格高度取决于文本大小,请遵循以下步骤:在ViewController.swift中添加方法
func calculateHeight(inString:String) -> CGFloat {
let messageString = inString
let attributes : [String : Any] = [NSFontAttributeName : UIFont.systemFont(ofSize: 15.0)]
let attributedString : NSAttributedString = NSAttributedString(string: messageString, attributes: attributes)
let rect : CGRect = attributedString.boundingRect(with: CGSize(width: 222.0, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)
let requredSize:CGRect = rect
return requredSize.height
}
设置文本标签的宽度然后调用此函数:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
heightOfRow = self.calculateHeight(inString: conversations[indexPath.row].description)
return (heightOfRow + 60.0)
}
对于基本单元格:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
此功能不适用于自定义单元格。
如果您的单元格高度取决于图像高度,则返回图像高度+ someFloatValueAcordingToYourChoice。
希望它能奏效。
答案 2 :(得分:0)
timeStamp与消息之间的用户垂直间距,并将常量设置为&gt; = 2