以编程方式设置不适用于我的表视图的约束

时间:2018-05-24 03:46:05

标签: ios swift uitableview constraints

我的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

什么都没发生。 mainTabBarplayerView都是以编程方式设置的视图和视图的子视图。

我已尝试view.layoutSubviews()view.layOutIfNeeded()

1 个答案:

答案 0 :(得分:1)

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
   }
}

还有其他方法可以做到这一点,但这只是一个。