给定以下布局,其中flexible box
是,灵活宽度,按钮是固定宽度:
|-[______flexible_box_______]-[button1]-[button2]-|
如何让button1
和button2
独立“隐藏”,只需更改一个约束优先级?
为了说明,布局需要支持以下每种状态:
|-[______flexible_box_______]-[button1]-[button2]-|
|-[___________flexible_box____________]-[button1]-|
|-[___________flexible_box____________]-[button2]-|
|-[________________flexible_box_________________]-|
答案 0 :(得分:1)
使用iOS 9.0 +,UIStackView会为您解决此问题。隐藏其中一个排列子视图,布局忽略它。再次显示它并返回布局。
在此之前,您可以执行类似这组约束的操作:
|-[box]-(>=standard)-[button1]
|-[box]-(>=standard)-[button2]
|-[box]-(>=standard)-|
[button1]-(>=standard)-[button2]
[button1]-(>=standard)-|
[button2]-(>=standard)-|
|-[box]-(standard@700)-|
(如果你在IB中设置了这个,你可以在编辑约束时选择标准值。否则,你需要用实际值替换"标准" 。)
约束1-6确保物品保持有序而不重叠。 7号使盒子试图填满整个空间,但优先级降低。如果可以的话,它会占用空间。
如果隐藏button1,请为约束4和5的常量添加一些巨大的值。(实际上,您可能需要减去该值。我在这里使用的视觉格式语言是不明确的,哪个是第一个项目,这是第二个。)这放松了阻止盒子向右推按钮的障碍,盒子占用了松弛。重新显示它时,反转算术。
[更新:实际上,最好只是停用约束,而不是捣乱它们的常量。 (将active
属性设置为false。)您需要对约束进行强有力的引用,因为它们将从视图中删除,否则会保留它们。]
同样,如果隐藏button2,则调整约束6。
每个按钮不是一个约束,但我认为它与你能得到的一样近。