xcode autolayout隐藏视图占用空间

时间:2015-02-15 13:15:26

标签: xcode uitableview autolayout constraints

我一整天都在努力工作但是 但没有成功。我试图设置Button Top Constraing(垂直间距) 相对于tableView。 但是当我从我的快速代码中隐藏tableview时 仍占用空间。

layout views
我想要实现的是当我隐藏tableview时它会 在这种情况下按钮将不再占用空间和所有上方视图 像这样向上移动:

enter image description here

我也试过这个: 设置UIsearchbox顶部约束,然后设置tableview顶部约束 然后设置相对于tableview的Button top约束 然后创建了Button相对的顶级constrait 优先级为250的Uisearchbox。 但它仍然无效。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

当您显示表格视图时,将大值添加回常量,将其恢复为原始值。