2017-06-30 7 views
0

ビューコントローラのビューのサブビューのサイズと位置(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

コール 'layoutIfNeeded'。 –

答えて

0

あなたは、アニメーションブロックでlayoutIfNeeded()ないlayoutSubviews()を呼び出す必要があります。アニメーションの閉鎖にも制約を設定し、前

(あなたが実際にlayoutSubviews()を自分で呼び出すことはありません。それは、レイアウトパス中にシステムによって呼び出されるメソッドだとその目的のためだけに意図した。)

+0

メソッドを変更すると問題が解決しました。ありがとう。 –

-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]; 
+0

[編集]リンクを使用して、このコードの仕組みを説明し、コードを提供するだけではありません。説明が将来の読者に役立つ可能性が高いからです。 [回答]も参照してください。 –

関連する問題