我在IB中使用自动布局,我的屏幕布局看起来像这样:
+-----------------+
| +--+ +--+ +--+ |
| | | | | | | |
| | | | | | | |
| |1 | |2 | |3 | |
| | | | | | | |
| | | | | | | |
| +--+ +--+ +--+ |
+-----------------+
我的目标是创建一个灵活的动态视图。每当其中一个中心框从视图([object removeFromSuperview])中删除时,我希望约束更新,保持所有对象之间的统一空间。例如,在删除中心对象后,视图应该更新如下:
+-----------------+
| +--+ +--+ |
| | | | | |
| | | | | |
| |1 | |3 | |
| | | | | |
| | | | | |
| +--+ +--+ |
+-----------------+
目前我有大小约束,底部空间约束和前导空间约束-都是统一的。
调用removeFromSuperview后,我尝试调用layoutIfNeeded, updateConstraints,和更多。没有效果。对象只是停留在原来的位置。
这有可能实现吗?
您可能在视图2
和3
之间有间距约束。
当您删除视图2
时,您将不得不在视图1
和3
之间创建一个新的约束。
如果视图的数量是真正动态的,并且每个视图的大小是一致的,那么您可能应该使用UICollectionView
来代替。
如果你只有这3个视图,你可以在1 &3.编辑它,在2被删除后给它你想要的值,并将其优先级更改为小于1000,如900。因此,3将对1和2都有间距约束,但1到2将优先考虑,直到视图2被删除。如果你有超过3个视图,它会变得有点复杂,但你可以使用类似的方法。