动画约束时,子视图不会正确调整大小

时间:2017-06-30 11:07:02

标签: ios animation uiview autolayout subview

我需要更改视图控制器视图的子视图(称为playerView)的大小和位置。我已经为需要更改的约束创建了属性。但是当我为变化设置动画时,只有playerView是动画的,但它的所有子视图都不是:它们的大小会立即改变。

以下是文字:

self.playerViewTop.constant = screenHeight - MinizedPlayerTopOffset;
self.playerViewLeading.constant = MinimizedPlayerOffset;
self.playerViewWidth.constant = MinimizedPlayerWidth;
self.playerViewHeight.constant = MinimizedPlayerHeight;

[UIView animateWithDuration: 2.0 animations: ^
{
    [self.view layoutSubviews];
}];

我不明白为什么会发生这种情况,因为我使用autoLayout。请帮忙。

2 个答案:

答案 0 :(得分:0)

您需要在动画块中调用layoutIfNeeded() layoutSubviews()

(你实际上不应该自己打电话给layoutSubviews()。这是系统在布局通过期间调用的方法,仅用于此目的。)

答案 1 :(得分:-1)

[self.view layoutIfNeeded];
[self.subView setNeedsUpdateConstraints];
[self.subView updateConstraintsIfNeeded];
[UIView animateWithDuration:1.0f delay:0.0f 
options:UIViewAnimationOptionLayoutSubviews animations:^{
[self.view layoutIfNeeded];
} completion:nil];