我在IB中使用Autolayout。我的屏幕布局如下所示:
+-----------------+
| +--+ +--+ +--+ |
| | | | | | | |
| | | | | | | |
| |1 | |2 | |3 | |
| | | | | | | |
| | | | | | | |
| +--+ +--+ +--+ |
+-----------------+
我的目标是创建灵活的动态视图。每当从视图中移除其中一个中心框([object removeFromSuperview])时,我希望更新约束,在所有对象之间保持一致的空间。
例如,删除中心对象后,视图应如下更新:
+-----------------+
| +--+ +--+ |
| | | | | |
| | | | | |
| |1 | |3 | |
| | | | | |
| | | | | |
| +--+ +--+ |
+-----------------+
目前我有大小限制,底部空间限制和领先的空间限制 - 都是统一的。
在调用removeFromSuperview后,我尝试调用layoutIfNeeded,updateConstraints等。没有效果。对象只是保持原样。
这甚至可以实现吗?
答案 0 :(得分:2)
对于间距,您可能在视图2
和3
之间存在约束。
删除视图2
后,您必须在视图1
和3
之间创建新约束。
如果视图的数量是真正动态的,并且每个视图的大小一致,那么您应该使用UICollectionView
代替。
答案 1 :(得分:1)
如果您只有这3个视图,则可以在1和1之间创建水平间距约束。 3.编辑它以在删除2后为其提供所需的值,并将其优先级更改为小于1000,如900.因此,3将对1和2都有间距约束,但1到2将优先直到视图2被删除。如果你有超过3个视图,它会变得有点复杂,但你可以使用类似的方法。