ios - 如何让控件占据堆栈内的实际大小

标签 ios uiview xib uistackview ibdesignable

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

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

enter image description here

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

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

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

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

enter image description here

但事实并非如此。它被渲染成

enter image description here

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

这 3 个 View 都没有约束。

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

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

有什么想法吗?

最佳答案

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

关于ios - 如何让控件占据堆栈内的实际大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43442092/

相关文章:

ios - 使用方面适合的 Assets 目录切片

xcode - 禁用 NSButton 上的声音

iphone - 相机捕捉设备曝光模式锁定

ios - 无法看到数组中前 3 个 View Controller 的 .transitionFlipFromRight 动画

ios - 快速绘制一条全宽的虚线?

iphone - 在 appdelegate 加载我的 mainWindow.xib 之前设置 coredata

ios - 由于未捕获的异常 'RLMException' 而终止应用程序,原因 : 'This method may only be called on RLMArray instances retrieved from an RLMRealm

ios - 单击按钮时退出应用程序 - iOS

android - 如何在几个 AppContainer 之间导航

ios - UIModalPresentationFormSheet 的圆角