约束更改时如何更改UITableViewCell的高度?

时间:2018-07-13 17:00:04

标签: ios swift uitableview

我的问题与此有关:How to change height Constraint of UIView in UitableviewCell when using UITableViewAutomaticDimension

那里的解决方案似乎对我不起作用。

enter image description here

在上图中,我有一个简单的单元格。 在单元格上点击,我想将redView的约束更改为更大。然后应该会自动更改单元格的高度。

我已经将单元格的高度约束设置为@IBOutlet,我认为我正确地更改了单元格的大小,但是它不起作用。

这是我的示例应用无法正常运行。有什么帮助吗? SampleApp - for Xcode 9.3

2 个答案:

答案 0 :(得分:3)

您需要为红色视图设置一个底部约束,以便自动布局可以在设置常数值后拉伸单元格

extension ViewController: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "c", for: indexPath) as! customcell
        configure(cell: cell, indexPath: indexPath)
        cell.redview.backgroundColor = .red
        cell.selectionStyle = .none
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath) as! customcell
        cell.constraint.constant = data[indexPath.row] == "contracted"  ? 30 : 200
        data[indexPath.row] = data[indexPath.row] == "contracted" ? "expanded" : "contracted"
        tableView.reloadData()
    }

    func configure(cell: customcell, indexPath: IndexPath) {
        let data = self.data[indexPath.row]
        if data == "expanded" {
            cell.constraint.constant = 200
        } else {
            cell.constraint.constant = 30
        }

        cell.layoutIfNeeded()
    }
}

答案 1 :(得分:1)

调用以下内容将重新计算高度。

[tableView beginUpdates];
[tableView endUpdates];