UITableViewCell自定义类 - 在子视图高度约束更改后重新加载单元格高度
问题描述:
我在自定义类UITableViewCell
类中有一个按钮。它显示/隐藏视图(同一单元格的一部分)。细胞的高度应该改变。
这是按钮操作(在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并重新访问单元格时,它的高度才会更新。
答
以下方法添加到viewController
与tableView
刷新表时细胞扩展:
func refreshTableAfterCellExpansion() {
self.tableView.beginUpdates()
self.tableView.setNeedsDisplay()
self.tableView.endUpdates()
}
调用方法进行了更新。如果按钮操作单元格内的约束,则需要通知viewController
有关更改,以便您可以调用该方法。要么使用委托模式(或直接传递tableView
参照每个膨胀细胞 - 只记得将其存储为weak
变量),或发布使用NotificationCenter.default
的通知。
答
因为这些代码在TableViewCell,你需要为在TableViewController你的一个操作方法,所以当按钮被点击你就知道了。你可以把你的按钮的引用您的tableviewCell,然后将细胞cellForRowAt里面,你可以做
cell.yourButtonRef.addTarget(self, action: #selector(expandButtonTapped(_:)), for: .touchDown)
和创建一个名为“expandButtonTapped”功能,并添加tableview中beign和最终更新有
@objc func expandButtonTapped(_ button: UIButton) {
self.tableView.beginUpdates()
self.tableView.endUpdates()
}
请让我还是知道,如果这不是工作
我已经实现了你的差不多的东西,但我不得不这样做是“self.tableView.beginUpdates() self.tableView.endUpdates()”。请给一个尝试 – Siyavash
@Siyavash:我已经写在UITableViewCell的自定义类以上 – Nitish
哦这就是为什么可能的话,我会写一个可能的解决方案 – Siyavash