目前我在1个视图中有3个视图(固定在superview的前缘和后缘)。
3个观点目前看起来像这样:
但是,在某些情况下,我希望隐藏靛蓝视图,但仍保持最后2个相同的宽度,如下所示:
如何通过自动布局实现此目的?或者我如何使用IBOutlets实现约束?
答案 0 :(得分:8)
如果部署目标是iOS9或更高版本,建议使用UIStackView
作为封闭视图。在isHidden
中排列的任何视图上将true
设置为UIStackView
不仅会隐藏视图,而且堆栈视图也会重新组织所有非隐藏视图以填充隐藏视图占用的空间。可以通过调整distribution
上的UIStackView
来调整此行为。
Tj3n的答案有效,但它有一个缺点,你必须在你的代码中使用幻数,并在代码和IB中设置约束属性。
恕我直言,更好的解决方案是在IB中设置具有不同优先级的所有约束,并在代码中激活/停用它们。试试这个:high
。required
的所有三个视图设置0宽度约束,但在IB中将其停用。并将它们连接到代码中的IBOutlet
,就像连接视图一样。请注意,只需使用1和2,就可以实现等宽视图布局。使用3和4,您可以选择性地折叠/展开任何视图。
答案 1 :(得分:2)
它非常简单,你可以为3视图创建相等宽度约束A,设置其优先级为998,然后为它们创建另一个单宽度约束B1,B2,B3,设置优先级为997,如果要隐藏任何在3视图中,将B约束的常量设置为0,并将其优先级设置为999,然后调用self.view.layoutIfNeeded
,视图将隐藏,其他视图将缩放
答案 2 :(得分:0)