我有一个名为containerView
的UIView。
我将此作为子视图添加到控制器视图的根视图中。我已经以编程方式为它添加了一些约束(我将其置于中心位置,并将宽度从superview的宽度调整为几点)。
我在UILabel
中添加了一些containerView
作为子视图。 UILabel
s的高度决定containerView
的高度。
当用户点击屏幕时,containerView
从CGRectOffset()
向上移动,一旦动画完成,它就会移回原始位置。
CGPoint absolutePoint = self.containterView.frame.origin;
self.containerYConstraint.constant = -absolutePoint;
[UIView
animateWithDuration:0.5
animations:^
{
[viewForUpdate setNeedsUpdateConstraints];
}
completion:^(BOOL finished)
{
self.containerYConstraint.constant = 0;
[viewForUpdate setNeedsUpdateConstraints];
[self.containerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; // Remove all subviews
}];
我需要将我放在那里的UILabel
作为子视图删除,并用不同的标签替换它们。但是,当我删除其中一个UILabel时,整个containerView
都会丢失(我将背景设置为红色,以便我可以看到它)。我删除了示例中的所有子视图,但是当我尝试删除一个时,会发生相同的效果。
为什么会这样?这与自动布局有关吗?另外,如果我想在删除其中一个UILabel之后重新输入它,我该如何重新制作约束?
答案 0 :(得分:1)
使用AutoLayout时修改帧是禁忌。一旦开始使用AutoLayout,您就可以有效地告诉系统您希望它为您设置帧。
不是直接设置框架的动画,而是创建指向约束的属性并为这些约束设置动画。