给定以下布局,其中flexible box
是宽度灵活,按钮为固定宽度:|-[______flexible_box_______]-[button1]-[button2]-|
如何使button1
和button2
都独立地“可隐藏”,并且每个约束的优先级都进行一次更改?
为了说明这一点,布局需要支持以下每个状态:
|-[______flexible_box_______]-[button1]-[button2]-|
|-[___________flexible_box____________]-[button1]-|
|-[___________flexible_box____________]-[button2]-|
|-[________________flexible_box_________________]-|
最佳答案
使用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。
每个按钮并不是一个约束,但是我认为它尽可能地接近。
关于ios - 使用自动版式独立切换两个嵌入式项目的可见性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32364647/