Используя swift, у меня есть UITableView
и кастом UITableViewCells
. После инициализации каждой ячейки я вызываю метод (layoutViews()
) для применения соответствующих ограничений (NSLayoutConstraint.activate([...]
). Одно ограничение, метка, ведущая привязка, является динамическим на основе строки и приводит к некоторому отступу между родительскими и дочерними записями.
Пример:
Parent
Child
Parent
Parent
Child
Grandchild
Child
Child
При прокрутке ограничения запутываются и приводят к дублированию ограничений в одной и той же ячейке
Ошибка: невозможно одновременно удовлетворить ограничения ... Попытка восстановления путем нарушения ограничения).
В большинстве случаев отступы не выполняются, когда это должно быть.
Я попытался деактивировать предыдущие ограничения, удалить предыдущие ограничения и удалить все представления из суперпредставления. Я получил разные результаты, но ни один из них не был правильным.
Я просто хочу, чтобы отступ совпадал со значением CGFloat
, которое я предоставляю в функции getIndentaion()
.
По запросу, вот соответствующий код (сокращенная форма, конечно).
В UIViewController:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CustomCell
cell.setIndentation(2)
cell.layoutViews()
return cell
}
В пользовательской ячейке:
func getIndentation() -> CGFloat {
return 5 + ((indentation ?? 0) * 15)
}
func layoutViews() {
NSLayoutConstraint.activate([
messageLabel.leadingAnchor.constraint(equalTo: messageBackground.leadingAnchor, constant: getIndentation())
])
}
Любая помощь приветствуется.