动态变量的自动布局约束?

时间:2014-12-01 12:20:03

标签: ios objective-c autolayout nslayoutconstraint

是否可以使用动态常量/乘数来设置自动布局约束(NSLayoutConstraint)?

例如,这将是沼泽标准NSLayoutConstraint

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:obj1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:obj2 attribute:NSLayoutAttributeLeft multiplier:1 constant:0];

然后,这将是对约束的改变,但是常量中的动态变量:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:obj1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:obj2 attribute:NSLayoutAttributeLeft multiplier:1 constant:scrollView.contentOffset.x];

第二个将采用contentOffset的{​​{1}}并将其用作常量。但是,尝试过这个,它只使用约束时存在的偏移量。

当滚动视图滚动时,我希望它让约束更新常量。这样它就会继续使用最新的scrollview

这可能吗?感谢。

1 个答案:

答案 0 :(得分:6)

肯定是。

事实上,这就是它们的基础。当您为视图等设置动画时......您需要能够更改约束。

反直觉地,NSLayoutConstraint唯一可写的属性是constant属性。 (LOL)

但你的代码并不完全正确。

创建约束,首先要为它创建一个属性......

@property (nonatomic, strong) NSLayoutConstraint *leftConstraint;

然后创建它......

self.leftConstraint = [NSLayoutConstraint constraintWithItem:obj1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:obj2 attribute:NSLayoutAttributeLeft multiplier:1 constant:0];

然后编辑已存在的约束...

self.leftConstraint.constant = scrollView.contentOffset.x;

然后你需要强制视图重新传出子视图......

[self.view layoutIfNeeded];