我的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()
答案 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
}
}
还有其他方法可以做到这一点,但这只是一个。