我试图创建的屏幕非常简单。我有两个UIView堆叠在一起。顶部的UIView,topView,高度为40px,下面的UIView,botView,占据了屏幕的其余部分。但是,有时topView不应该出现,我希望botView占据整个屏幕。
我尝试过的是在两个视图上设置宽度,前导/尾随空格。然后topView获得与顶部布局指南的距离,botView获得与底部布局指南的距离,然后是topView和botView之间的垂直间距的附加约束。但是这导致xcode对我大喊大叫,我还没有在其中一个视图上设置高度或y约束。当然,我不能设置高度约束,因为我不希望它们中的任何一个都是固定的高度。
我确信这里必须有一个优雅的约束解决方案,我似乎无法弄明白。想法?
答案 0 :(得分:1)
如果topView
的高度始终为40px,则为topView
的高度添加约束。
对于botView
,您可以保留当前约束,表明其顶部必须与topView
的底部相关联。但是为底部视图添加另一个约束,优先级低于required
,表示它应该距离超级视图顶部0px。这样,当您从包含视图中删除topView
时,botView
与topView
相关的约束将被删除,因此将满足较低优先级约束。
如果您想推回topView
,请使用botView
优先级重新创建topView
到required
远距离约束。
答案 1 :(得分:1)
有几种方法可以做到这一点。一个选项
在IB中列出您的观点。然后从顶部,底部,左侧和右侧引脚顶视图0 px。指定高度约束为40像素。要轻松执行此操作,请单击您的视图,然后在右下角单击看起来像|的按钮+ |。单击虚线红线以指定约束。见图:
对其他视图执行相同操作。不要为此视图指定高度,因为它的高度取决于其高度的40像素视图。接下来找到40 px视图的高度约束。您可以使用助理编辑器控制将插座拖动到视图控制器,就像使用UIButton或任何其他IB元素一样。当你想要隐藏你的40像素视图时,将变量常量属性设置为0.当你想再次显示它时,将它设置回40。
self.topViewHeightConstraint.constant = 0;
您可以选择的另一个选项是将顶视图0 px固定到顶部,左侧和右侧。不要提供底部约束,但将高度指定为40 px。对于底部视图添加添加0 px的左,右和底部约束。对于顶部约束,从顶部超级视图添加40 px的约束。再次为最近的顶部约束添加一个出口,当您希望视图更大时,将该约束设置为0.
答案 2 :(得分:0)
另一种选择:在IB中,为BOTVIEW添加到顶部布局指南约束的距离(它将是40 ...)然后单击并拖动此常量到VC以创建NSLayoutConstraint属性。see also here
现在,在隐藏topView的条件下,设置self.myConstraint.constant = 0;这将强制botView调整大小以满足从顶部为0的条件。
您可能必须清除当前的约束以消除错误,但这应该提供所需的行为。
就像Tom Ahh建议的“topView”一样,继续给它一个40的高度限制并将它固定在顶部,就像你已经在做的那样。