Вы получаете сообщение об ошибке, потому что вы уже объявили ограничение высоты для вашего UITableView
через makeConstraints
метода SnapKit
, и ваш addButtonAction()
предположительно вызывается более одного раза, чтобы продолжать "создавать" конфликтующие ограничения по высоте с большими значениями
Что ж, viewDidLoad
обычно вызывается не более одного раза, но лучше этого не предполагать и выполнять внутри него одноразовые настройки. Если вы создаете экземпляр из файла пера, попробуйте сделать это внутри awakeFromNib
...
Теперь, чтобы решить это внутри viewDidLoad
: -
1) Если вы хотите, чтобы это быть одноразовым процессом, вы можете создать свойство (типа Constraint
, которое является пользовательским типом объекта SnapKit) для хранения ссылки на ограничение высоты, которое вы объявляете внутри tableView.snp.makeConstraints
, и выполнять проверку nil:
Delcare свойство выше:
private var tableViewHeightConstraint: Constraint?
и сделать нулевую проверку:
tableView.snp.makeConstraints { (make) in
make.left.equalTo(self.view).offset(10)
make.right.equalTo(self.view).offset(-10)
make.top.equalTo(self.view).offset(120)
if self.tableViewHeightConstraint == nil {
self.tableViewHeightConstraint = make.height.equalTo(tableHeight!)
}
}
2) Или, если вы хотите обновить высоту каждый раз (как вы увеличиваете tableHeight
на 60), вы можете использовать updateConstraints
:
tableView.snp.updateConstraints { (make) in
//Update your height constraint here. Note: This will keep increasing the height of your table on every call
make.height.equalTo(tableHeight!)
}
(после этого может потребоваться позвонить layoutIfNeeded()
, чтобы изменения произошли)
Я не тестировал этот код, но он должен сделать это для вас. Если нет, дайте мне знать ...