我有一个带有4个按钮及其相应标签的UIView。它们当前以视图为中心,中间的按钮具有必要的适当的尾随和前导空间约束,以便始终在它们之间定义空间。
但是,现在当其中一个按钮被隐藏(并且一次只隐藏两个中间按钮中的一个,最大)时,按钮需要重新居中。我似乎无法删除与尾随和前导空格相关的约束而没有界面生成器在我身上进行barfing,因为我不能只对子视图有约束,我想要覆盖按钮的所有约束(宽度和高度除外)按钮本身)与尾随(和/或)前导空格相关。
作为没有视觉图片的例子
一个----->乙-----&以及c -----> d
这些是我的四个按钮,下方有标签(当然未显示),它们之间有四个空格(但所有这些按钮都在视图中居中)。如果B被隐藏,那么我想在视图中重新定位A,C和D,但现在当然原始设置的尾随和前导空间已经过时,需要根据此示例重置。如果C被隐藏,那么我需要重新居中并重置A,B和D的约束,其中B需要在视图中居中,A和D在任一侧具有相同的间距(四个空格)。
有没有办法在这样的代码中覆盖这些约束?似乎没有办法在XCode中设置条件约束(虽然这样会很好)并且仍然没有办法去除子视图中的约束,以便您可以在代码中创建它们。
此解决方案需要支持iOS 7& 8,我不能只关闭自动布局,因为屏幕上其他视图中的其他元素使用约束。
有什么想法?想法?
答案 0 :(得分:0)
直接的方法是重做你的约束。
话虽如此,你是否需要重新显示隐藏的按钮?如果没有,我看到的一个简单方法是添加一个低优先级约束,当隐藏一个按钮时应该启动它,而不是隐藏你想要隐藏的按钮,而是从它的超级视图中完全删除它。
假设,如果按钮B可以被隐藏,则在A和C之间添加一个水平间距约束,优先级低于B的压缩阻抗优先级,并且当B被隐藏时,该值是A和C之间正确的间距。当你想要隐藏B时,将其从超级视图中删除(有效地删除与其相关的约束),并且应该启动低优先级约束。