如何使控件占据堆栈内的实际大小
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
类基于XIB
s。按钮位于这些XIB
s 内的水平堆栈内。
这就是问题所在。假设我必须在绿色按钮上隐藏 2 个按钮。因为两者都在水平堆栈中,并且它们的按钮也在水平堆栈中,所以当我从每个按钮中隐藏一个或多个按钮时,我希望控件减小其宽度。
在这种情况下,通过隐藏绿色按钮的 2 个按钮,我希望将整个内容呈现为
但事实并非如此。它呈现为
注意:当控件收缩时,我需要第三个视图来占据剩余空间。我使用该视图将控件强制向左,因为我无法仅使用堆栈来做到这一点,而堆栈总是试图扩展整个事物。
这三个视图都没有约束。
XIB
内的按钮具有水平宽度约束,但它们使用的优先级为 750 而不是 1000。
存放控件的栈是水平的,填充,填充,间距 20。 保存xib内部按钮的堆栈是水平的,填充,填充,间距0。
有什么想法吗?
【问题讨论】:
【参考方案1】:如何隐藏按钮?通过 isHidden=true?那么这就是原因。自动布局忽略隐藏状态。按钮还在。您也必须停用/更改按钮的约束。例如将按钮的宽度约束设置为 0。
【讨论】:
以上是关于如何使控件占据堆栈内的实际大小的主要内容,如果未能解决你的问题,请参考以下文章