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

时间:2017-04-16 21:00:10

标签: ios uiview xib uistackview ibdesignable

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

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

enter image description here

这些控件有多个按钮。按钮表示配置的值。它们是用于让用户在多个之间选择特定配置的单选按钮。由于这些按钮被多次使用,因此特定配置可能只有4个选项可供选择,因此我必须隐藏3个按钮,在其他情况下需要隐藏2个按钮。

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

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

在这种情况下,通过隐藏绿色的两个按钮,我希望整个事物呈现为

enter image description here

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

enter image description here

注意:当控制合同时,我需要第三个视图占用剩余空间。我使用该视图强制控件向左,因为我无法仅使用堆栈来执行此操作,这总是试图扩展整个事物。

这3个视图都没有约束。

XIB内的按钮具有宽度的水平约束,但它们使用的优先级为750而不是1000.

保持控件的堆栈是水平,填充,填充,间距20。 保持xib内部按钮的堆栈是水平,填充,填充,间距为0。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你如何隐藏按钮?通过isHidden = true?那就是原因。 Autolayout忽略隐藏状态。按钮仍在那里。您还必须停用/更改按钮的约束。例如将按钮的宽度约束设置为0。