更新约束/帧后,视图被编程从父视图(自动布局)



我在IB中使用自动布局,我的屏幕布局看起来像这样:

+-----------------+
| +--+ +--+ +--+  |
| |  | |  | |  |  |
| |  | |  | |  |  |
| |1 | |2 | |3 |  |
| |  | |  | |  |  |
| |  | |  | |  |  |
| +--+ +--+ +--+  |
+-----------------+
我的目标是创建一个灵活的动态视图。每当其中一个中心框从视图([object removeFromSuperview])中删除时,我希望约束更新,保持所有对象之间的统一空间。

例如,在删除中心对象后,视图应该更新如下:

+-----------------+
| +--+ +--+       |
| |  | |  |       |
| |  | |  |       |
| |1 | |3 |       |
| |  | |  |       |
| |  | |  |       |
| +--+ +--+       |
+-----------------+

目前我有大小约束,底部空间约束和前导空间约束-都是统一的。

调用removeFromSuperview后,我尝试调用layoutIfNeeded, updateConstraints,和更多。没有效果。对象只是停留在原来的位置。

这有可能实现吗?

您可能在视图23之间有间距约束。

当您删除视图2时,您将不得不在视图13之间创建一个新的约束。

如果视图的数量是真正动态的,并且每个视图的大小是一致的,那么您可能应该使用UICollectionView来代替。

如果你只有这3个视图,你可以在1 &3.编辑它,在2被删除后给它你想要的值,并将其优先级更改为小于1000,如900。因此,3将对1和2都有间距约束,但1到2将优先考虑,直到视图2被删除。如果你有超过3个视图,它会变得有点复杂,但你可以使用类似的方法。

最新更新