Ios 在自调整大小UITableView中更改单元格高度

Ios 在自调整大小UITableView中更改单元格高度,ios,uitableview,Ios,Uitableview,我有一个具有自调整大小行为的表视图,在初始负载下运行良好。每个单元格都有添加注释的功能,这些注释显示在标题下的单元格上,并容纳单元格需要调整自身大小的注释文本。 我试图调整约束,并在contentView上调用setNeedsLayout,但似乎没有多大帮助,单元格也没有调整大小。 如何在不重新加载tableview的情况下调整单元格的大小。对table view单元格尺寸的更改需要传达给其父表视图,以便可以更改其他单元格尺寸。最简单的方法是在beginUpdates()和endUpdates(

我有一个具有自调整大小行为的表视图,在初始负载下运行良好。每个单元格都有添加注释的功能,这些注释显示在标题下的单元格上,并容纳单元格需要调整自身大小的注释文本。 我试图调整约束,并在contentView上调用setNeedsLayout,但似乎没有多大帮助,单元格也没有调整大小。
如何在不重新加载tableview的情况下调整单元格的大小。

对table view单元格尺寸的更改需要传达给其父表视图,以便可以更改其他单元格尺寸。最简单的方法是在
beginUpdates()
endUpdates()
中包装大小更改,这也会使更改成为动画

例如,假设我有一个具有展开和折叠状态的
UITableViewCell

final class TableViewCell: UITableViewCell {

    var isExpanded: Bool = false {
        didSet {
            heightConstraint.constant = isExpanded ?  150 : 75
        }
    }

    lazy var heightConstraint = self.heightAnchor.constraint(equalToConstant: 75)

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        heightConstraint.isActive = true
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
它由
isExpanded:Bool
控制

我可以展开或折叠表视图中所有可见的
TableViewCell
s,方法是:

@objc
private func toggleExpanded() {
    tableView.beginUpdates()
    // Finding all of the visible cells of type `TableViewCell` and changing isExpanded to not isExpanded
    tableView.visibleCells.flatMap { $0 as? TableViewCell }.forEach { $0.isExpanded = !$0.isExpanded }
    tableView.endUpdates()
    // toggle back in 2 seconds
    perform(#selector(self.toggleExpanded), with: nil, afterDelay: 2.0)
}
其结果如下:


您可以看到完整的游乐场源代码

基本上这是beyowulf所说的-您需要通知tableView重新绘制自己-请参阅以获取解释和示例,如果有帮助,请留下向上投票。。