我有一个包含三个控件的水平堆栈。
前两个(下图中的绿色和橙色)基于IB_DESIGNABLE
UIView
类。相对于这些控件必须具有的宽度,这些类中没有width
约束。第三个 View 是常规的 UIView
。
这些控件有多个按钮。按钮代表配置值。它们是单选按钮,用于让用户在多个配置之间选择一个特定的配置。因为这些按钮被多次使用,一个特定的配置可能只有 4 个选项可供选择,所以我必须隐藏 3 个按钮,在其他情况下隐藏 2 个,依此类推。
这些IB_DESIGNABLE
类基于XIB
。按钮位于这些 XIB
内的水平堆栈内。
这就是问题所在。假设我必须在绿色按钮上隐藏 2 个按钮。因为两者都在水平堆栈中,而且它们的按钮也在水平堆栈中,所以当我从每个按钮中隐藏一个或多个按钮时,我希望控件减小其宽度。
在这种情况下,通过隐藏绿色按钮中的 2 个按钮,我希望整个按钮呈现为
但事实并非如此。它被渲染成
注意:当控件收缩时,我需要第三个 View 来占据剩余空间。我使用那个 View 强制控件向左移动,因为我无法仅使用堆栈来做到这一点,它总是试图扩展整个东西。
这 3 个 View 都没有约束。
XIB
中的按钮具有水平宽度限制,但它们使用的优先级为 750 而不是 1000。
容纳控件的堆栈是水平的,填充,填充,间距 20。 xib 内部存放按钮的堆栈是水平的,填充,填充,间距为 0。
有什么想法吗?
最佳答案
如何隐藏按钮?通过 isHidden=true?那么就是这个原因。自动布局忽略隐藏状态。按钮仍然在那里。您也必须停用/更改按钮的约束。例如将按钮的宽度约束设置为 0。
关于ios - 如何让控件占据堆栈内的实际大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442092/