在iOS中以编程方式更改NSLayoutConstraint的关系

时间:2016-03-28 14:59:12

标签: ios autolayout nslayoutconstraint

屏幕底部有一个UITextView 它有leading, trailing bottom space constraints to the superview 它还有height constraint with value (constant) 40

我想在此处输入更多文字时,将此文本视图设为灵活高度。 我可以通过将高度约束值更改为greater than or equal来使灵活高度为:

enter image description here

它工作正常,文本视图高度不断增加。

但是当我制作它时,故事板显示了这个错误:

enter image description here

我希望以编程方式使约束值大于或等于约束值,而不是来自故事板。

我知道NSLayoutConstraint有一个名为

的属性
public var relation: NSLayoutRelation { get }

但我们可以看到它是只读的。

如何将此关系更改为以下之一:

public enum NSLayoutRelation : Int {   
    case LessThanOrEqual
    case Equal
    case GreaterThanOrEqual
}

或者是否有任何解决方法在基于自动布局的故事板中查看灵活高度?

我知道如何制作约束的IBOutlet并改变它的常量值,但在我的情况下我不能这样做,它应该动态改变。

2 个答案:

答案 0 :(得分:1)

相关:auto layout modify multiplier of constriaint programmatically

使用ARC:

- (void)changeConstraintRelationToEqual:(NSLayoutConstraint * __strong *)constraint{
    NSLayoutConstraint *newConstraint = [NSLayoutConstraint constraintWithItem:(*constraint).firstItem attribute:(*constraint).firstAttribute relatedBy:NSLayoutRelationEqual toItem:(*constraint).secondItem attribute:(*constraint).secondAttribute multiplier:(*constraint).multiplier constant:(*constraint).constant];
    [self.view removeConstraint:(*constraint)];
    [self.view addConstraint:newConstraint];
    *constraint = newConstraint;
}

答案 1 :(得分:0)

我过去通过标记我需要在运行时设置的约束来解决这个问题,因为"占位符 - 在构建时删除"在“接口”构建器中,然后通过代码添加约束,以编程方式提供基于动态值的约束。