CregectOffset后AutoLayout无法正常工作

时间:2014-12-11 21:19:34

标签: ios objective-c iphone uiview uilabel

我有一个名为containerView的UIView。

我将此作为子视图添加到控制器视图的根视图中。我已经以编程方式为它添加了一些约束(我将其置于中心位置,并将宽度从superview的宽度调整为几点)。

我在UILabel中添加了一些containerView作为子视图。 UILabel s的高度决定containerView的高度。

当用户点击屏幕时,containerViewCGRectOffset()向上移动,一旦动画完成,它就会移回原始位置。

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之后重新输入它,我该如何重新制作约束?

1 个答案:

答案 0 :(得分:1)

使用AutoLayout时修改帧是禁忌。一旦开始使用AutoLayout,您就可以有效地告诉系统您希望它为您设置帧。

不是直接设置框架的动画,而是创建指向约束的属性并为这些约束设置动画。