我的结构如下:
您可以看到我为文本视图添加了固定高度约束。但是,它错了,因为我无法在应用启动之前知道文本视图高度。我将加载数据,有时高度可能为100,下次将为1000,具体取决于内容。
我想要的是,在视图加载之前,以编程方式计算预期文本视图高度并添加固定高度约束。
答案 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];
}
}];