如何同时具有宽度约束和等宽度约束

时间:2016-07-26 12:13:51

标签: ios objective-c ios9 nslayoutconstraint

我在xib中有一个父视图,并且有3个按钮作为其子视图,它们的宽度相等,因此为所有3分配了相等的宽度约束(优先级为1000),现在所有3个按钮的宽度相等。这工作正常。现在有些情况下只需要2个按钮,所以我想只有2个按钮占用整个空间而没有第三个按钮。

为了实现这一点,我为所有3个按钮添加了一个宽度约束,并将其优先级设置为999.然后创建了一个IBoutlet并尝试将约束置于零。但它似乎不起作用。

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *fConstraint;

然后检查条件

if(item.isShareable == NO){
    self.fConstraint.constant = 0;
}

约束不会变为零。

我错过了什么?我怎样才能实现它?

希望你能理解这个问题。

提前致谢。

3 个答案:

答案 0 :(得分:0)

按照以下步骤实现您的要求,

  1. 将前导/尾随约束设置为superView。

  2. 为所有三个按钮设置相等的宽度约束,并将其优先级设置为高。

  3. 为所有三个按钮设置0宽度约束,但需要优先级,但在IB中将它们取消激活。并将它们连接到代码中的IBOutlets,就像连接视图一样。

  4. 激活任何0宽度约束以折叠所需的按钮,然后停用它们以展开。

  5. 请注意,只需使用1和2,就可以实现等宽视图布局。使用3和4,您可以选择性地折叠/展开任何视图。

    希望对你有所帮助。

    <强>更新

    我已经创建了一个演示程序,用于演示如何在不使用StackViews的情况下实现所需的结果,如果你想支持9以下的iOS版本,下面是结果,

    enter image description here

答案 1 :(得分:0)

您可以尝试采用相等宽度约束的出口,

你的情景应该是,

leading,trailing,top,fixed height and equal width设置为视图中的每个按钮。

所以,你的第一个按钮应该有两个相等的宽度约束一个相对于第二个,一个相对于第三个。

所以请考虑任何相等的宽度约束,并在需要时更改它的常量。

我认为你需要管理前导和尾随约束的常量,以便在隐藏一个按钮时改变位置。

答案 2 :(得分:0)

如果按钮的设计会不断变化,那么更好的想法是使用percentage逻辑构建代码。

功能:

- (float)percentage:(float)value withFatherView:(UIView *)fatherView isHeightPercentage:(BOOL)isHeightPercentage
{
    float viewValue = fatherView.frame.size.width;

    if (isHeightPercentage)
        viewValue = fatherView.frame.size.height;

    return (viewValue * value) / 100;
}