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

时间:2017-10-05 10:24:56

标签: ios swift uitableview

我在自定义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()
    }  

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

2 个答案:

答案 0 :(得分:3)

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

func refreshTableAfterCellExpansion() {
    self.tableView.beginUpdates()
    self.tableView.setNeedsDisplay()
    self.tableView.endUpdates()
}

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

答案 1 :(得分:1)

由于此代码位于TableViewCell中,您需要在TableViewController中为您的单元格创建一个action方法,因此当单击该按钮时您会知道。您可以在tableviewCell中保留按钮的引用,然后在单元格cellForRow内部保留

cell.yourButtonRef.addTarget(self, action: #selector(expandButtonTapped(_:)), for: .touchDown)

并创建一个名为" expandButtonTapped"的函数。并添加tableview beign并在那里结束更新

@objc func expandButtonTapped(_ button: UIButton) {
    self.tableView.beginUpdates() 
    self.tableView.endUpdates()


}

请告诉我这是否有效