我正在使用自动布局,我有一个按钮,它只是弹出一个列表来选择。问题是,我添加了一个开关,让我可以关闭/打开searchBar是否应该出现在popover中。
所以我需要重置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的默认自动生成约束中得到此错误。
有没有办法可以在新的约束之前擦除所有垂直约束?
答案 0 :(得分:0)
你正在做什么 - 将约束存储在ivar中 - 很好,也许比你要求的更好,因为它只得到你设置的约束。
然而,您可以访问"所有垂直"使用UIView
' constraintsAffectingLayoutForAxis(_ axis: UILayoutConstraintAxis)
的视图约束,传递UILayoutConstraintAxis.Vertical
。