StackView 在 Button 被隐藏时为 Button 上浆

Posted

技术标签:

【中文标题】StackView 在 Button 被隐藏时为 Button 上浆【英文标题】:StackView starches ButtonA when ButtonB is hidden 【发布时间】:2018-07-01 11:30:08 【问题描述】:

我有一个带有 2 个按钮的堆栈视图。

当 ButtonA 被隐藏时,buttonB 被拉伸。

我希望按钮 B 的宽度与指定的宽度相同。如何正确设置 UIStuckView。 这是我现在正在做的设置:

【问题讨论】:

你的堆栈视图有什么限制吗? 如果你只有这两个按钮,那么设置不会太复杂,只使用堆栈视图。另一种方法是,您可以将这两个按钮放在UIView 中,并为它们设置固定宽度约束。 @luda :默认情况下,StackView 根据其中的内容采用隐式大小。由于 UIButton 的大小基于标题或图像集(当然,除非被约束覆盖)StackView 不会拉伸其中的内容。你必须对stackView有宽度限制。如果是,请使用这些信息更新您的问题。最后,当 B 被隐藏时,您将其框架设置为 CGSize.zero 或将其从 superView 中删除是什么意思,因为简单地隐藏按钮不会将其从 stackView 中删除 【参考方案1】:

您可以做的第一件事是在按钮 B 上设置约束

buttonB.widthAnchor.constraint(equalToConstant: 50).isActive = true

或者您可以将按钮放在另一个视图中,然后在按钮和外部视图之间设置前导和尾随约束,以确保按钮不超过所需的宽度。

【讨论】:

【参考方案2】:

您可以将这些按钮放在 containerView 中,并为按钮设置固定宽度和高度,这样只有 ContainerView 会调整它们的大小,而按钮只会调整它们的位置。以下可以让您了解此设置,

这里RedContainerView有三个约束,zerolefttopbottomStackView

同样GreenContainerView 具有三个约束,zero 来自righttopbottom

A buttoncenter verticallyhorizontallyRedContainerView 修复 width 和高度为 40。

同样,B buttoncenter verticallyhorizontallyGreenContainerView,固定 width 和高度为 40。

现在,当两个 containerView 都可见时,你会得到这个,

当您将RedViewContainer's isHidden 设置为true 时,GreenContainerView 将相应调整如下,

【讨论】:

以上是关于StackView 在 Button 被隐藏时为 Button 上浆的主要内容,如果未能解决你的问题,请参考以下文章

隐藏stackview中的第一个子视图和其他在iOS 10.2上消失但不是11

如何在水平stackview中居中按钮?

隐藏stackView时打破约束

Stackview中的iOS 10方形UIIMageView在隐藏时会破坏自动布局

动态大小嵌套的 UIStackView

UIStackview 隐藏标签时不调整大小