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

Posted

技术标签:

【中文标题】具有等宽约束的 iOS 隐藏按钮【英文标题】:iOS Hide button with equal width constraint 【发布时间】:2018-05-08 15:02:01 【问题描述】:

所以我正在尝试根据应用程序中的权限实施一些功能限制。有问题的功能适用于 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)

但这一切只是隐藏了第一个按钮,而第二个按钮突然部分脱离了屏幕。如果我尝试不手动禁用约束,我会让它看起来更干净,但第二个按钮仍处于其原始位置,可能是因为由于约束它仍保持原始宽度。

【问题讨论】:

为什么不以编程方式创建按钮? 这是为了工作,而这部分项目很久以前就完成了。我试图保持较小的更改,并且修改情节提要需要更长的时间才能使新更改获得批准。 【参考方案1】:

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

    移除等宽约束 在其中一个按钮上设置宽度约束,设置为超级视图宽度的 0.5 倍,然后为该约束创建一个出口 将带有尾随或前导(取决于您选择的按钮)的另一个按钮设置为零。

    当你需要折叠按钮时,你现在可以像这样直接设置约束的常量:

    buttonWidth.constant = 0
    

这将隐藏视图并为您提供所需的效果。

【讨论】:

【参考方案2】:

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

【讨论】:

你能删除这个问题或标记一个正确的答案吗? 您将此答案标记为正确,但此答案未能回答实际问题。 根据所提出的问题没有有用的答案。

以上是关于具有等宽约束的 iOS 隐藏按钮的主要内容,如果未能解决你的问题,请参考以下文章

iOS:具有隐藏视图的布局约束

如何在iOS中以编程方式从UIButton中删除等宽约束

ios使用约束隐藏视图

iOS 以编程方式生成的视图具有隐藏的约束,导致与自动布局发生冲突

如何在 UIStackView 中保留隐藏视图的约束

约束/自动布局栏隐藏,Xcode 6