滚动后,表格视图显示正确的单元格高度

问题描述

只有在滚动一些单元格后,我才发现table vie单元格有问题。 I tried some answers from this post Text添加了layoutIfNeeded()但我似乎没有用

video showing the issue

我的代码

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()