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

Posted

技术标签:

【中文标题】xcode自动布局隐藏视图占用空间【英文标题】:xcode autolayout hidden view takes up space 【发布时间】:2015-02-15 13:15:26 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

【讨论】:

你好 Ken,我做的确切的事情是: 1 添加按钮相对于 tableview 的顶部约束 2 添加按钮相对于 uisearchbox 的顶部约束,优先级为 900 3 按钮相对于 tableview 的顶部约束我设置大于或等于 tableview 底部 4 我为相对于 tableview 的约束添加了一个出口,当我隐藏 tableview 时,我将常量更改为 self.buttonTopTableviewConstr.constant = -10000 我没有设置任何宽度/高度或等于宽度/高度或其他水平约束。只是我提到的4件事。它不起作用我错过了什么吗?谢谢!!! “不起作用”是指按钮没有向上移动到搜索框下方?你确定你连接了插座?更改常量后尝试记录[theButton constraintsAffectingLayoutForAxis:UILayoutConstraintAxisVertical] 的结果。 您能帮忙快速拨打电话吗?谢谢。 不确定。我想它是 println(button.constraintsAffectingLayoutForAxis(Vertical)) 假设你有一个按钮的出口。 谢谢,我打印了 button.constraintsAffectingLayoutForAxis(.Vertical) 这是输出:pastebin.com/raw.php?i=sJdFBb7E

以上是关于xcode自动布局隐藏视图占用空间的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上使用自动布局如何指定视图应占用尽可能多的空间?

隐藏 UIView 并调整其他小部件以占用空间?

View.GONE 仍然在布局中占用空间

无法将 iOS 自动布局乘数设置为零

布局:一列根据需要宽,另一列占用剩余空间

尝试理解 iOS 8 中的 UIScrollView 自动布局