gpt4 book ai didi

ios - 使用 AutoLayout 约束隐藏 UIView

转载 作者:IT王子 更新时间:2023-10-29 07:49:31 25 4
gpt4 key购买 nike

有时我想从布局中删除一个 subview 。它不仅应该被隐藏,而且不应该被认为是 View “流”的一部分,可以这么说。一个例子:

enter image description here

我正在寻找一种以编程方式隐藏橙色 View 的策略。盒子的布局及其内容是通过自动布局实现的。需要注意两点:

  • 橙色框根据内容定义其垂直高度,外加一些顶部/底部边距偏移量。因此,将标签的文本设置为 nil 只会将 View “缩小”到它的内部边距,高度不会为 0。
  • 同样,三个框之间的垂直间距意味着即使橙色框的高度为 0,红色和黄色之间的间距也会是所需的两倍。

可能的解决方案

我最好的建议是向橙色框添加一个约束,将其高度设置为 0。为此,我需要对橙色框内的所有垂直约束使用非必需的优先级。同时,容器应该更新分隔框的约束常量。我不太喜欢这种方法,因为橙色盒子类在定义它的内部约束时考虑了它的 super View 的行为。如果橙色框 View 改为公开添加 0 高度约束本身的“折叠”方法,也许我可以接受它。

有没有更好的方法?

最佳答案

您可以通过在较低优先级的黄色和红色 View 之间添加额外约束并在代码中调整优先级来实现此目的。

enter image description here

短虚线约束(orangeToRedCon 是导出)的优先级为 999(您不能将必需的优先级更改为非必需的,因此它不是 1000)。长虚线约束 (yellowToRedCon) 的优先级为 500,常量为 20。在代码中,您可以隐藏橙色 View ,并交换这些优先级,这将导致黄色 View 向上移动到您设置的任何值设置为 yellowToRedCon 的常量值。

-(void)changePriorities {
self.yellowToRedCon.priority = 999;
self.orangeToRedCon.priority = 500;
[UIView animateWithDuration:.5 animations:^{
self.orangeView.alpha = 0;
[self.view layoutIfNeeded];
}];
}

此方法不需要对橙色 View 的高度进行任何更改。

关于ios - 使用 AutoLayout 约束隐藏 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com