自动布局如何在一个视图中隐藏1个视图,3个等宽视图
目前我有1视图内的3个视图(这是固定在超视图的前沿和后沿)。
目前3个视图是这样的:
但是,在某些情况下,我希望隐藏靛蓝色的视图,但是仍然保留最后2个像这样的宽度:
我怎样才能实现这一点与自动布局? 或者我怎样才能达到这个使用IBOutlets约束?
Tj3n的答案是有效的,但是它有一个缺点,就是你必须在你的代码中使用魔术数字,并在代码和IB中设置constrant属性。
恕我直言,一个更好的解决scheme将设置在不同优先级的IB的所有限制,并在代码中激活/停用它们。 尝试这个:
- 像以前一样设置前导/尾随约束。
- 为所有三个优先级
high
视图设置相等的宽度限制。 - 为所有三个视图设置0宽度约束,并使其在IB中停用。 并将它们连接到
IBOutlet
代码中,就像连接视图一样。 - 激活任何0宽度的约束来折叠你想要的视图,然后停用它们来展开。
请注意,只要使用1和2,就可以实现等宽视图布局。 与3和4,你可以折叠/扩大任何意见select性。
很简单,你可以为3视图创build等宽的约束A,设置其优先级为998,然后为它们创build另一个单宽度约束B1,B2,B3,设置优先级为997,如果要隐藏任何3查看,将B约束的常量设置为0,并将其优先级设置为999,然后调用self.view.layoutIfNeeded
,视图将隐藏,其他将缩放
testing约束是灰色视图的宽度约束:
如果它始终是可以隐藏的靛蓝视图,则应该通过添加以下约束来解决您的问题:
靛蓝视图:导致超视图+尾随到紫色视图+宽度约束
紫色视图:与grayView相同的宽度
灰色视图:导致紫色视图+追踪到超级视图
它应该看起来像这样:
如果你改变你的indigoView的宽度属性,所有的都应该遵循正确的。
希望能帮到你。