自动布局如何在一个视图中隐藏1个视图,3个等宽视图

目前我有1视图内的3个视图(这是固定在超视图的前沿和后沿)。

目前3个视图是这样的:

3个宽度相同的视图

但是,在某些情况下,我希望隐藏靛蓝色的视图,但是仍然保留最后2个像这样的宽度: 与靛蓝视图隐藏2宽度相等的意见

我怎样才能实现这一点与自动布局? 或者我怎样才能达到这个使用IBOutlets约束?

Tj3n的答案是有效的,但是它有一个缺点,就是你必须在你的代码中使用魔术数字,并在代码和IB中设置constrant属性。

恕我直言,一个更好的解决scheme将设置在不同优先级的IB的所有限制,并在代码中激活/停用它们。 尝试这个:

  1. 像以前一样设置前导/尾随约束。
  2. 为所有三个优先级high视图设置相等的宽度限制。
  3. 为所有三个视图设置0宽度约束,并使其在IB中停用。 并将它们连接到IBOutlet代码中,就像连接视图一样。
  4. 激活任何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的宽度属性,所有的都应该遵循正确的。

希望能帮到你。