是否可以使用动态常量/乘数来设置自动布局约束(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
。
这可能吗?感谢。
答案 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];