【问题标题】:Constraints for Centering One Button When the Other Is Hidden当另一个按钮被隐藏时使一个按钮居中的约束
【发布时间】:2017-03-31 06:33:24
【问题描述】:

我在视图控制器上有两个按钮。它们的高度和宽度相等,并且间距很好,在屏幕上居中。 问题是在某些情况下,其中一个按钮是隐藏的。 当其中一个按钮被隐藏时,我希望另一个按钮居中。

在我的一生中,我一直无法弄清楚如何配置约束来实现这一点。

我可以移动可见按钮,以便在隐藏另一个按钮时它居中,但似乎只能在加载视图后执行此操作,这会使按钮“跳转”而且看起来很傻。

【问题讨论】:

  • 你可以使用UIStackView来达到这个效果。将两个按钮添加到堆栈视图并将堆栈视图居中。

标签: ios swift xcode uibutton autolayout


【解决方案1】:

UIStackView 中嵌入两个按钮:

并根据您的需要调整其设置:


button1 隐藏的结果 == false(未勾选):

button1 隐藏的结果 == true(勾选):

【讨论】:

  • 非常感谢。这不仅完美地解决了我的问题,而且让我(最终)了解了 UIStackView 的功能。
  • 不过仅适用于 iOS 9+。
【解决方案2】:

像这样的故事板约束不应该移动,如果没有正确执行,可能会导致很多 UI 问题。

我的建议?这并不理想,但只需添加第三个按钮。如果您必须隐藏一个按钮,只需隐藏两个按钮,然后显示第三个按钮。

【讨论】:

    【解决方案3】:

    如果您能够将按钮放置在正确的位置,请尝试对其进行动画处理以使其具有良好的效果。请注意,这只会对约束的更改进行动画处理,因此如果您正在做其他事情来使按钮移动,它可能不起作用。

    UIView.animate(withDuration: 0.5, animations: {
          //do whatever you're doing to make the button 'jump' to the right position here
          self.view.layoutIfNeeded()
    })
    

    【讨论】:

    • 使用这种方法,您需要以编程方式重置所有约束。否则,您设置的新位置将被 layoutIfneeded 覆盖,这会将对象移回其约束定义的位置。老实说,这是更正确的做事方式。但做起来有点难。
    猜你喜欢
    • 2012-02-04
    • 2011-08-15
    • 2011-12-10
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多