单击后,UITableViewCell会调整大小,约束也会发生变化

时间:2016-11-26 18:50:07

标签: ios swift uitableview

我在TableViewCell中填充了数据。我想仅显示一个标签,例如,在用户点击单元格后,将调整大小并向用户显示所有数据。我已完成调整部分的大小,但当单元格很小时,它会自动更改我的约束。有人能帮助我吗?代码和照片如下。

谢谢!

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if (i != indexPath.row) {
        i = indexPath.row
    }
    else {
        i = -1
    }
    tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
}


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if (indexPath.row == i) {
        return 250
    }
    else {
        return 50
    }
}

before user clicks

after user clicks

1 个答案:

答案 0 :(得分:1)

当单元格高度为50时,您的约束被破坏,因为没有足够的空间容纳它们,因为您希望它们被布局。因此,在您添加到单元格中的元素之前的任何其他约束之前,单元格的高度就会受到尊重,因此它们会被挤压在一起。

要消除约束错误,请使用约束的优先级和关系模式。

最后,当您的单元格折叠时,您可以通过调用以下应隐藏的标签来隐藏除要显示的标签之外的所有其他标签:

label.hidden = true

或者像他们一样动画他们的消失:

UIView.animate(withDuration: 0.2, animations: {
        label.alpha = 0            
    }, completion: { completed -> Void in
            label.hidden = true
})

当你展开细胞时,反过来使它们重新出现。