Программная установка ограничений не работает для моего табличного представления - PullRequest
0 голосов
/ 24 мая 2018

У меня есть следующие ограничения для моего UItableView (из раскадровки):

musicHomeTableView.translatesAutoresizingMaskIntoConstraints = false
musicHomeTableView.topAnchor.constraint(equalTo: view.topAnchor ).isActive = true
musicHomeTableView.bottomAnchor.constraint(equalTo: mainTabBar.topAnchor).isActive = true
musicHomeTableView.widthAnchor.constraint(equalToConstant: view.frame.width).isActive = true

Приведенный выше код вызывается из viewDidLoad, и он отлично работает.Тем не менее, когда я пытаюсь выполнить этот код позже:

musicHomeTableView.bottomAnchor.constraint(equalTo: playerView.topAnchor).isActive = true

Ничего не происходит.mainTabBar и playerView являются программно настраиваемыми представлениями и подпредставлениями представления.

Я пробовал view.layoutSubviews() и view.layOutIfNeeded()

1 Ответ

0 голосов
/ 24 мая 2018

musicHomeTableView уже имеет ограничение bottomAnchor.Вам нужно удалить это ограничение перед добавлением еще одного к той же привязке.Установка другого ограничения для той же привязки не удаляет старое ограничение.

class ViewController {
   var musicHomeTableViewBottomAnchorConstraint: NSLayoutConstraint?

   func viewDidLoad() {
      musicHomeTableViewBottomAnchorConstraint = musicHomeTableView.bottomAnchor.constraint(equalTo: view.topAnchor)
      musicHomeTableViewBottomAnchorConstraint!.isActive = true
   }

   func addNewConstraint() {
     if let constraint = musicHomeTableViewBottomAnchorConstraint {
        constraint.isActive = false
     }
     // Add new constraint here
   }
}

Есть и другие способы сделать это, но это один.

...