问题描述
只有在滚动一些单元格后,我才发现table vie单元格有问题。 I tried some answers from this post Text。添加了layoutIfNeeded()但我似乎没有用
我的代码:
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView === MainTable{
if let cell = tableView.dequeueReusableCell(withIdentifier: "Medname",for: indexPath) as? MedCell{
let backgroundView = UIView()
backgroundView.backgroundColor = UIColor.white.withAlphaComponent(0.0)
cell.selectedBackgroundView = backgroundView
cell.setMedname(name: self.medCatalog[indexPath.row].nombre,uso: self.medCatalog[indexPath.row].uso )
cell.layoutIfNeeded()
cell.updateConstraintsIfNeeded()
cell.layoutSubviews()
self.cellBool[indexPath.row] = true
self.collapsedCellHeight[indexPath.row] = cell.medText.bounds.height
return cell
}
}
self.cellBool[indexPath.row] = false
self.collapsedCellHeight[indexPath.row] = 0.0
self.expandedCellHeight[indexPath.row] = 0.0
return UITableViewCell()
}
func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat {
if self.cellBool[indexPath.row] != nil {
if self.cellBool[indexPath.row]!{
let nameHeight = self.collapsedCellHeight[indexPath.row]!
let topAnchor: CGFloat = 12.0
let bottomAnchor: CGFloat = 10.0
let cellHeight = nameHeight + topAnchor + bottomAnchor + 9 + 2
return cellHeight
}
}
return 85
}
编辑
我忘了提到创建可扩展和可折叠行的主要目标,以及为什么在蓝色UIlabel下方有一个UIlabel。
蓝色uilabel文本是从json获得的。 json中的某些值有点长,因此uilabel创建另一行以显示所有内容。这就是为什么我需要提供单元格高度的原因,因为我的某些标签只有1行,而另一条则多于一行,因此我需要计算蓝色标签的高度并在didSelectRowAtIndexPath
上扩展整个单元格。我知道如何展开和折叠行,但我不知道这是为什么表的行为如此
解决方法
我通过替换来修复了
cell.layoutIfNeeded()
cell.updateConstraintsIfNeeded()
cell.layoutSubviews()
使用
cell.layoutIfNeeded()
cell.layoutSubviews()
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()