ios 在nslayoutconstraint中设置常量动画-不明确的布局

qqrboqgw  于 2023-06-25  发布在  iOS
关注(0)|答案(1)|浏览(109)

看看人们的例子,我认为在一个方向上设置NSLayoutConstraint.constant的动画是非常简单的。我总是得到模棱两可的布局,我不知道为什么。我有一个标签,我有这些约束设置在viewDidLoad中。

NSLayoutConstraint *xConstraint = [NSLayoutConstraint constraintWithItem:_locationLabel
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeLeading
                                                                 multiplier:1.0
                                                                   constant:20];

    [self.view addConstraint:xConstraint];
    NSLayoutConstraint *yConstraint = [NSLayoutConstraint constraintWithItem:_locationLabel
                                                                   attribute:NSLayoutAttributeTop
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeTop
                                                                  multiplier:1.0
                                                                    constant:20];
    [self.view addConstraint:yConstraint];
    self.locationLabelYConstraint = yConstraint;

然后我只想在Y方向上移动标签。在我的手势识别方法中:

if (_locationLabelYConstraint.constant == 20.0) {
    _locationLabelYConstraint.constant = 30.0;
} else {
    _locationLabelYConstraint.constant = 20.0;
}
[UIView animateWithDuration:3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:10 options:0 animations:^{
    self.isLocationLabelOnScreen = NO;
    [self.view layoutIfNeeded];
}completion:nil];

标签按照我的预期移动,但我立即得到了控制台的模糊布局。

"<NSIBPrototypingLayoutConstraint:0xc0a73b0 'IB auto generated at build time for view with fixed frame' V:|-(20)-[UILabel:0xc0a4400]   (Names: '|':UIView:0xc0a65b0 )>",
"<NSLayoutConstraint:0xc0a6d90 V:|-(30)-[UILabel:0xc0a4400]   (Names: '|':UIView:0xc0a65b0 )>"

对于设置nslayoutconstraint常量值的动画,我不只是更新常量值,并在动画块中调用layoutIfNeeded吗?

34gzjxbg

34gzjxbg1#

这是因为接口生成器生成的约束与您的约束冲突。
在Interface Builder上自己创建约束并通过outlet以编程方式引用它们会更容易。

相关问题