swift - Swift、自动布局和堆栈 View 的问题

标签 swift autolayout storyboard stackview

我一直在开发一个带有按钮网格的应用程序。该网格每行包含 4 个按钮,(当前)有 6 行。在 Storyboard中,每行按钮都位于水平堆栈 View 中,所有 6 个堆栈 View 都位于垂直堆栈 View 中。

我不希望所有按钮始终可见,因此我使用 .isHidden 打开和关闭它们。当我在模拟器中运行应用程序时,这会导致一些问题:

  1. 我希望所有按钮保持相同的大小,但如果给定行/堆栈 View 中的一个或多个按钮被隐藏,则该行中的其余按钮会调整其大小以填充该行。我猜对按钮的约束和堆栈 View 上的设置的组合可以解决这个问题,但我还没有想出正确的组合。

  2. 如果我从前 3 行按钮全部取消隐藏开始,然后尝试取消隐藏其他行中的按钮,所有按钮都会消失。但是,如果我“打印”每个按钮的 .isHidden 状态,则应该可见的按钮具有 .isHidden = false

有什么想法可以解决这些问题吗?

预先感谢您的帮助。

最佳答案

回答你的第一个问题...

当您隐藏 UIStackView 中的 View 时,自动布局会将其视为“消失”——堆栈 View 将重新布局其 arrangedSubviews就好像这个 View 从一开始就不存在一样。

如果你想要这个结果:

enter image description here

您最好的选择可能是将该 View /按钮的 .alpha 属性设置为 0。它将完全不可见(因此,实际上是“隐藏”),并且堆栈 View 将保留其当前布局。而且,.alpha = 0 的控件不会响应触摸(因此您无法点击不可见的按钮)。

对于您的第二个问题,我建议您单独重新发布该问题。确保包含您正在使用的未达到预期结果的代码。

参见:How to Ask

关于swift - Swift、自动布局和堆栈 View 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236358/

相关文章:

ios - 使用自定义类创建圆形指示器,其宽度和高度太大

ios - 当 `translatesAutoresizingMaskIntoConstraints` 设置 `NO` 时 View 消失

ios - UITableView 和 AutoLayout - 没有显示表格

swift - (存档)Swift Range 支持 float 吗?

ios - 如何检查两个数组中是否存在公共(public)值 - 在 SWIFT 中?

swift - 使用多个字段更新 firebase 数据库(iOS,swift)而不覆盖现有数据

iOS AutoLayout 额外填充无处不在

iphone - 如何以编程方式调整 Storyboard 中 UIBarButtonItem 的可见性

wpf - 加载控件后立即启动模板动画

ios - 2 个不同的纵向和横向 Storyboard