我正在练习自动布局并学习动画约束。
我的第一个问题是。如果我动态添加视图,将它们的约束动态添加到父视图似乎很麻烦。有没有什么干净的方法可以实现灵活的布局,可以通过编程方式添加和删除视图?或者这是否意味着我应该为我想要完成的事情想一个更简单的解决方案?
第二个问题。我在代码中创建了两个视图和一些约束。我只是想在加载时调整第一个视图的高度约束,使其变短,而第二个视图将相应地向上移动。
这是一些代码:
first = [[UIView alloc]initWithFrame:CGRectZero];
[first setBackgroundColor:[UIColor blueColor]];
[first setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:first];
UIView *second = [[UIView alloc]initWithFrame:CGRectZero];
[second setBackgroundColor:[UIColor redColor]];
[second setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:second];
NSLayoutConstraint *leading = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:20];
NSLayoutConstraint *trailing = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:-20];
top = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:40];
height = [NSLayoutConstraint constraintWithItem:first attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:80];
[self.view addConstraints:@[leading,trailing,top,height]];
[height setConstant:10];
[UIView animateWithDuration:0.5 animations:^{
[self.view layoutIfNeeded];
}];
好的,所以在底部运行我的动画.. 我的第二个视图已经定位在动画结束时的位置。第一个视图从左上角扩展到右下角。它以对角线进行动画处理,最终高度为 10。
谁能解释这种行为。我注意到如果我分配约束,并使它们在 IBAction(按钮触摸)上动画,那么它将按预期动画。