首页 > 解决方案 > 内容更改时调整 UITableviewCell 的大小

问题描述

我有一个带有标签、按钮和大小为 0 的隐藏文本字段的 TableViewCell。如果用户点击按钮,文本字段应该变得可见。到目前为止,一切都很好。但在控制台中,我在该动画期间收到约束错误,因为文本字段需要的空间比单元格当前的大小要多。

如何避免约束错误?

这是我的实现:

func showTextField(show:Bool){

        if show{
            if textFieldHeightConstraint.constant != 200{
                UIView.animate(withDuration: 0.4) { [weak self] in
                    self?.textFieldHeightConstraint.constant = 200
                    self?.feedbackTextView.isHidden = false
                    self?.viewModel?.refreshTableView()
                }
            }
        }
        else{
            textFieldHeightConstraint.constant = 0
            feedbackTextView?.text = "TODO"
            feedbackTextView.isHidden = true
            viewModel?.refreshTableView()
        }
    }

//然后在控制器中:

func refreshTableView(){
        tableView.beginUpdates()
        tableView.endUpdates()
    }

约束错误:

(
    "<NSLayoutConstraint:0x600000a3fa70 UITextView:0x7f8cd4073e00'TODO'.height == 200   (active)>",
    "<NSLayoutConstraint:0x600000a13020 V:|-(16)-[UILabel:0x7f8cd2e19130'M\U00f6chten Sie zu dieser Rec...']   (active, names: '|':UITableViewCellContentView:0x7f8cd2e140d0 )>",
    "<NSLayoutConstraint:0x600000a0fb10 V:[UILabel:0x7f8cd2e19130'M\U00f6chten Sie zu dieser Rec...']-(8)-[UIButton:0x7f8cd2e16ea0'Add remark']   (active)>",
    "<NSLayoutConstraint:0x600000a0a490 V:[UITextView:0x7f8cd4073e00'TODO']-(>=16)-|   (active, names: '|':UITableViewCellContentView:0x7f8cd2e140d0 )>",
    "<NSLayoutConstraint:0x600000a32440 V:[UIButton:0x7f8cd2e16ea0'Add remark']-(8)-[UITextView:0x7f8cd4073e00'TODO']   (active)>",
    "<NSLayoutConstraint:0x600000a484b0 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7f8cd2e140d0.height == 156   (active)>"
)

标签: uitableviewautolayout

解决方案


推荐阅读