清除所有垂直自动布局约束

时间:2015-02-11 19:57:17

标签: ios swift

我正在使用自动布局,我有一个按钮,它只是弹出一个列表来选择。问题是,我添加了一个开关,让我可以关闭/打开searchBar是否应该出现在popover中。

enter image description here enter image description here enter image description here

所以我需要重置top guide和searchBar之间的表约束,具体取决于切换。

我在popover中使用了这段代码:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.view.setTranslatesAutoresizingMaskIntoConstraints(false)
    if (searchBar.hidden) {
        let views = ["tableView": tableView]
        constraintsWithoutSearchbar = NSLayoutConstraint.constraintsWithVisualFormat("V:|[tableView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views)
        self.view.removeConstraints(constraintsWithSearchbar)
        self.view.addConstraints(constraintsWithoutSearchbar)
    } else {
        let views = ["tableView": tableView, "searchBar": searchBar]
        constraintsWithSearchbar = NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[searchBar][tableView]|", options: NSLayoutFormatOptions(0), metrics: nil, views: views)
        self.view.removeConstraints(constraintsWithoutSearchbar)
        self.view.addConstraints(constraintsWithSearchbar)
    }
    tableView.reloadData()
}

问题是我必须存储这些约束以删除它们并添加新约束,否则我会无法同时满足约束。错误。我也从IB的默认自动生成约束中得到此错误。

有没有办法可以在新的约束之前擦除所有垂直约束?

1 个答案:

答案 0 :(得分:0)

你正在做什么 - 将约束存储在ivar中 - 很好,也许比你要求的更好,因为它只得到你设置的约束。

然而,您可以访问"所有垂直"使用UIView' constraintsAffectingLayoutForAxis(_ axis: UILayoutConstraintAxis)的视图约束,传递UILayoutConstraintAxis.Vertical