iOS隐藏具有相等宽度约束的按钮

时间:2018-05-08 15:02:01

标签: ios swift uibutton nslayoutconstraint

所以我试图根据应用中的权限实现一些功能限制。有问题的功能适用于位于main.storyboard中VC底部的按钮。

还有另一个按钮,我想留在那里。它们水平对齐,但不在水平堆栈视图中。它们具有等宽约束,并且一起占据底部的整个垂直空间。

我想要隐藏第一个,因此让第二个从左到右占据整个水平空间,但只有在应该限制对第一个按钮的访问时。我已尝试在viewNeedsRefresh中执行此操作:

let equalWidthConstraint = firstButton.superview?.constraints.filter{
                $0.firstItem as? UIButton == firstButton && $0.secondItem as? UIButton == secondButton
            }.first
equalWidthConstraint?.isActive = false
firstButton.isHidden = true
secondButton.frame = CGRect(x: 0, y: firstButton.frame.origin.y, width: self.view.frame.width, height: firstButton.frame.height)

但这一切都是隐藏第一个按钮,而第二个按钮突然部分偏离屏幕。如果我在没有手动禁用约束的情况下尝试,我会让它看起来更干净,但第二个按钮仍处于原始位置,可能是因为它因约束而仍保持原始宽度。

2 个答案:

答案 0 :(得分:0)

就我个人而言,我个人会做以下事情:

  1. 删除等宽度约束
  2. 在其中一个设置为超视图宽度的0.5倍的按​​钮上设置宽度约束,然后为约束创建一个出口
  3. 将另一个按钮设置为尾随或前导(取决于您选择的按钮)为零。
  4. 当您需要折叠按钮时,您现在可以直接设置约束的常量:

    buttonWidth.constant = 0
    
  5. 这会隐藏视图并为您提供所需的效果。

答案 1 :(得分:0)

事实证明,在我加入之前,他们已经为此构建了一个可重复使用的组件,但实际上并没有多次使用它。我已将页面转换为使用该组件。对不起伙计们。