UITableViewCell 自定义类 - 在子视图高度约束更改后重新加载单元格高度

Nit*_*ish 1 uitableview ios swift

我在自定义UITableViewCell类中有一个按钮。它显示/隐藏视图(同一单元格的一部分)。这样做时,单元格的高度应该改变。
这是按钮操作(在UITableViewCell自定义类中):

@IBAction func showHideCartView(sender: UIButton)
    {
        if sender.tag == 1
        {
            // Show cart view
            self.buttonArrow.tag = 2
            self.viewAddToCart.isHidden = false
            self.constraint_Height_viewAddToCart.constant = 50
            self.buttonArrow.setImage(UIImage(named: "arrowUp.png"), for: .normal)
        }
        else
        {
            // Hide cart view
            self.buttonArrow.tag = 1
            self.viewAddToCart.isHidden = true
            self.constraint_Height_viewAddToCart.constant = 0
            self.buttonArrow.setImage(UIImage(named: "arrowDown.png"), for: .normal)
        }

        self.setNeedsUpdateConstraints()
        self.setNeedsLayout()
        self.layoutIfNeeded()
    }  
Run Code Online (Sandbox Code Playgroud)

单元格的高度保持不变。只有当我滚动 UITableView 并重新访问单元格时,它的高度才会更新。

Mil*_*sáľ 5

将以下方法添加到viewController以在tableView单元格展开时刷新表格:

func refreshTableAfterCellExpansion() {
    self.tableView.beginUpdates()
    self.tableView.setNeedsDisplay()
    self.tableView.endUpdates()
}
Run Code Online (Sandbox Code Playgroud)

在约束更新后调用该方法。如果按钮操作单元格内的约束,您将需要通知viewController有关更改的信息,以便您可以调用该方法。要么使用委托模式(或直接传递tableView对每个可扩展单元格的引用——只需记住将其存储为weak变量),或使用NotificationCenter.default.