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

Posted

技术标签:

【中文标题】如何使控件占据堆栈内的实际大小【英文标题】:How to make controls occupy the real size inside a stack 【发布时间】:2017-04-16 21:00:09 【问题描述】:

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

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

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

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

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

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

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

注意:当控件收缩时,我需要第三个视图来占据剩余空间。我使用该视图将控件强制向左,因为我无法仅使用堆栈来做到这一点,而堆栈总是试图扩展整个事物。

这三个视图都没有约束。

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

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

如何隐藏按钮?通过 isHidden=true?那么这就是原因。自动布局忽略隐藏状态。按钮还在。您也必须停用/更改按钮的约束。例如将按钮的宽度约束设置为 0。

【讨论】:

以上是关于如何使控件占据堆栈内的实际大小的主要内容,如果未能解决你的问题,请参考以下文章

动态宽度大小以适应堆栈视图中的控件

js堆栈的理解

如何在 Xcode 7 中使用对象库的堆栈视图

如何在此自定义堆栈实现中正确分配更多内存?

堆栈红色区域的实际大小是多少? [复制]

水平堆栈视图中按钮的宽度 - iOS - 故事板