以编程方式将约束添加到文本视图

时间:2016-02-01 08:32:45

标签: ios objective-c autolayout

我的结构如下:

enter image description here

您可以看到我为文本视图添加了固定高度约束。但是,它错了,因为我无法在应用启动之前知道文本视图高度。我将加载数据,有时高度可能为100,下次将为1000,具体取决于内容。

我想要的是,在视图加载之前,以编程方式计算预期文本视图高度并添加固定高度约束。

3 个答案:

答案 0 :(得分:1)

为高度约束添加参考出口。 根据内容值高度更改约束出口值常量。

@property(弱)IBOutlet NSLayoutConstraint * constraintTextviewHeight;

以编程方式更改值,如下所示 constraintTextviewHeight.constant = 100或200或任何所需的高度

答案 1 :(得分:1)

您需要做的第一件事是创建约束的IBOutlet。用于约束的IBOutlet的创建方式与为视图元素创建Outlet的方式相同。创建插座后,您将拥有

@property (weak) IBOutlet NSLayoutConstraint *constraintName;

添加在您的代码中。您接下来要做的就是为文本视图设置文本并更改约束。

constraintName.constant = 50 //assuming 50 is height of your text view.

更新约束调用

self.view.layoutIfNeeded()

layoutIfNeeded强制接收者在需要时立即布置其子视图。

答案 2 :(得分:0)

您还可以在不IBOutlet引用约束的情况下更新和访问任何约束。试试KVConstraintExtensionsMaster库。

/** applyHeightConstraint method will add a new height constraint on yourView 
  * If yourView already have height constraint, It will update the constraint constant too. 
  */
  [yourView applyHeightConstraint:80]; // this will add height constraint
  [yourView applyHeightConstraint:100]; // this will updates height constraint

// To access height constraint 
  [yourView accessAppliedConstraintByAttribute:NSLayoutAttributeHeight completion:^(NSLayoutConstraint *expectedConstraint){
    if (expectedConstraint) {
        // do here additional stuff 
        expectedConstraint.constant = 150;
        // To update constant with nice animation
        [yourView updateModifyConstraintsWithAnimation:NULL];
    }
}];