移除 UIView 后重置其他组件的约束

Posted

技术标签:

【中文标题】移除 UIView 后重置其他组件的约束【英文标题】:Reset Constraints for the other components after removing a UIView 【发布时间】:2018-05-13 10:03:05 【问题描述】:

我有一个横幅 UIView,如果用户有 NoAds 功能,我想删除它。

问题是在我删除横幅 UIView 后,我无法找到一种方法来设置顶视图的约束来包裹 ViewController 的其余部分。

这里有一些图片让你更好地理解。

我使用removeFromSuperview() 方法删除了横幅UIView

在情节提要上,我的底部约束设置为 0,朝向最近的邻居,当时是 UIView 横幅。问题是,在我移除 Banner UIView 后,我想将上面 UIView 的底部约束设置为 0,朝向 SuperView。

提前致谢。

【问题讨论】:

试试这个NSLayoutConstraint.deactivate(myView.constraints) 我似乎无法找到对我有帮助的方法。我希望顶部 UIView 的底部约束更改为 0 但不朝向横幅 UIView (已被删除)。我希望它在 SuperView 结束时变为 0。 好的,你可以试试这个发送固定高度约束到banner UIView当你删除它们时设置myHeightConstraint.constant = 0 removeFromSuperview() 【参考方案1】:

只要你可以使用简单的解决方案

你可以设置 TopView , Banner in Vertical StackView with Distribution Fill 对齐填充

当 Stack-view 项目之一 隐藏 然后另一个将展开

查看图片

如果你需要使用 Constrain,你有 activatedeactivate 然后调用 setNeedsLayout()

【讨论】:

做到了!谢谢,甚至不知道这个选项。 :P 我有一个静态 AdManager 类,用于保存所有横幅广告的数组。一旦用户购买,我只需通过循环数组从超级视图中删除所有横幅。由于横幅都在堆栈视图中,它会自动工作。

以上是关于移除 UIView 后重置其他组件的约束的主要内容,如果未能解决你的问题,请参考以下文章

becomeFirstResponder 重置其他视图的 x/y 位置

隐藏 UIView 后如何重置 tableview 内容高度

element-ui 移除整个表单的校验结果(或重置表单及验证) 使用方法

win10总是提示已重置应用默认设置是怎么回事

自动布局:隐藏工具栏后重置底部约束

在 UIScrollView 中滚动后,视图重置为原始界面构建器高度和约束