如何使控件占据堆栈中的实际大小

How to make controls occupy the real size inside a stack

我有一个包含三个控件的水平堆栈。

前两个(下图中的绿色和橙色)基于IB_DESIGNABLE UIView 类。这些 类 中没有 width 相对于这些控件必须具有的宽度的限制。第三个视图是常规 UIView.

这些控件有多个按钮。按钮代表配置值。它们是单选按钮,用于让用户select在多个之间进行特定配置。因为这些按钮被多次使用,一个特定的配置可能只有 4 个选项可供选择,所以我必须隐藏 3 个按钮,在其他情况下 2 个等等。

这些 IB_DESIGNABLE 类 是基于 XIB 的。按钮位于这些 XIB 内的水平堆栈内。

这就是问题所在。假设我必须在绿色按钮上隐藏 2 个按钮。因为两者都在一个水平堆栈中并且它们的按钮也在一个水平堆栈中,所以当我从每个按钮中隐藏一个或多个按钮时,我希望控件减小其宽度。

在那种情况下,通过隐藏绿色按钮中的 2 个按钮,我希望整个按钮呈现为

但事实并非如此。它呈现为

注意:当控件收缩时,我需要第三个视图来占据剩余的 space。我使用那个视图强制控件向左移动,因为我无法仅使用堆栈来做到这一点,它总是试图扩展整个东西。

None 这 3 个视图有限制。

XIB 中的按钮具有水平宽度限制,但它们使用的优先级为 750 而不是 1000。

放置控件的堆栈是水平的,填充,填充,间距 20。 xib里面放按钮的stack是horizo​​ntal, fill, fill, spacing 0.

有什么想法吗?

如何隐藏按钮?通过 isHidden=true?那么就是这个原因。自动布局忽略隐藏状态。按钮仍然在那里。您也必须 deactivate/change 按钮的约束。例如将按钮的宽度约束设置为 0.