首页 > 解决方案 > 以编程方式设置约束不适用于我的表格视图

问题描述

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

标签: iosswiftuitableviewconstraints

解决方案


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

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


推荐阅读