我需要更改视图控制器视图的子视图(称为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。请帮忙。
答案 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];