xcode自动布局隐藏视图占用空间

inr*_*rob 2 xcode constraints uitableview autolayout

我一整天都在努力完成这项工作,但
没有成功。我尝试设置相对于 tableView 的按钮顶部约束(垂直间距)。但是当我从我的快速代码中隐藏表格视图时,表格视图仍然占用空间。

布局视图
我想要实现的是,当我隐藏表格视图时,它将不再占用空间,并且在这种情况下所有上述视图的按钮将向上移动,如下所示:

在此输入图像描述

我也尝试过:设置 UIsearchbox 顶部约束,然后设置 tableview 顶部约束,然后设置相对于 tableview 的 Button 顶部约束,然后创建相对于 Uisearchbox 的 Button 顶部约束,优先级为 250。但它仍然不起作用。

Ken*_*ses 6

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

如果您希望布局在视图可见性更改时更改,则必须在视图可见性更改时手动修改约束。您可以禁用/卸载某些并启用/安装其他,或者可能更改约束的常量。

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

按钮有无数个位置满足第一个约束,因为它是一个不等式。第二个约束本身无法满足,但没关系,因为它的优先级较低。尽管如此,自动布局系统仍试图尽可能地满足它。这解决了歧义并使按钮保持在表格视图的底部。

为第一个约束保留一个出口。当您隐藏表视图时,从constant第一个约束中减去一个大值。您不必小心选择该值,只要它确保大于表视图的高度即可。假设是 10,000。第二个限制是尝试将按钮拉到搜索框的正下方。第一个约束是防止这种情况发生,但常数的变化缓解了该限制,并允许通过向上移动按钮来直接满足第二个约束。

当您显示表视图时,将大值添加回常量,将其返回到其原始值。