2016-07-26 117 views
0

我在xib中有一个父视图,并且在其子视图中有3个按钮,它们的宽度相等,因此为所有3指定了一个等宽度约束(优先级为1000) ,现在所有3个按钮都采用相同的宽度。这工作正常。现在有些场景只需要2个按钮,所以我想只有2个按钮占据整个空间,没有第三个按钮。如何同时具有宽度约束和等宽约束

为了实现我为所有3按钮添加宽度约束并将其优先级设置为999.然后创建了一个IBoutlet并试图将该约束置零。但它似乎并不奏效。

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

然后检查约束没有变为零的情况

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

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

希望你明白这个问题。

在此先感谢。

+0

你应该使用'UIStackView'这个 –

+0

@FOOO与隐藏你不想显示...如果你是隐藏的按钮,它的高度约束按钮尝试可以将细胞归零 –

+0

@SimonMcLoughlin可以告诉你如何使用它。我是UIStackView的新手 – George

回答

0

按照下面的步骤来实现你需要什么,

  1. 设置前/后限制到上海华。

  2. 为所有三个按钮设置等宽限制并将其优先级设置为高。

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

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

请注意,只要1和2就位,您可以实现等宽视图布局。与3和4,你可以选择性地折叠/展开任何视图。

希望能帮到你。

更新

我已经创建了一个如何实现所需的结果演示的目的演示没有,如果你想支持低于9的iOS版本使用StackViews,这里是下面的结果,

enter image description here

+0

......或者你可以使用'UIStackView'并设置你不想隐藏的那个 –

+0

@Bharat这使得所有的按钮宽度变为零。我将相同的宽度和宽度设置为相同的优先级。 – George

+0

@SimonMcLoughlin StackView总是比玩约束更好,但UIStackViews支持iOS版本9及以上版本。 –

0

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

你的情况应该是这样的,

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

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

所以,在任何等宽的约束条件下,如果需要的话,改变它的常量。

而我认为你需要管理前后约束的常量还可以在隐藏一个按钮时改变位置。

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; 
}