xcode 自动布局隐藏视图占用space

xcode autolayout hidden view takes up space

我一整天都在努力完成这项工作,但是
但没有成功。我试图设置 Button Top Constraing (Vertical spacing) 相对于tableView。 但是当我从 swift 代码中隐藏表格视图时 仍然占用 space.


我想要实现的是,当我隐藏 tableview 时,它会 不再占用 space 并且在这种情况下所有上述视图按钮将 像这样向上移动:

我也试过这个: 设置 UIsearchbox 顶部约束然后设置 tableview 顶部约束 然后设置 Button top constraint relative to tableview 然后创建 Button 相对的顶部约束 优先级为 250 的 Uisearchbox。 但是还是不行。

视图的可见性对约束没有影响。隐藏视图仍然像可见视图一样参与约束系统。

如果您希望布局在视图的可见性发生变化时发生变化,则必须在视图的可见性发生变化时手动修改约束。您可以 disable/uninstall 一些和 enable/install 其他,或者可能更改约束的常量。

一种方法与您尝试的方法类似。创建一个约束,按钮的顶部必须大于或等于 table 视图的底部。创建另一个约束,使按钮的顶部等于搜索框的底部,优先级略有降低(但仍然相当高,比如 900)。

满足第一个约束的按钮有无限多个位置,因为它是一个不等式。第二个约束不能这样满足,但没关系,因为它的优先级较低。尽管如此,自动布局系统仍会尝试尽可能接近满足它。这解决了歧义并使按钮紧靠 table 视图的底部。

保留第一个约束的出口。隐藏 table 视图时,从第一个约束的 constant 中减去一个较大的值。您不必仔细选择值,只要它肯定大于 table 视图的高度即可。比方说 10,000。第二个约束是试图将按钮拉到搜索框正下方。第一个约束阻止了这种情况,但是常量的这种变化解除了这个限制,并允许通过向上移动按钮直接满足第二个约束。

当您显示 table 视图时,将较大的值添加回常量,使其恢复为原始值。