2017-07-10 17 views
0

高さの制約を変更した後、アニメーションに問題があります。スクリーンショットでは、初期値が120.0であることがわかります。 enter image description here アニメーションは機能しますが、アニメーション中ではなく、2番目のビュー(青いもの)からの制約の更新が直接行われます。これは、2番目のビューが直接上にジャンプすることを意味します。次のコードで 、私は高さ制約の変更をアニメーション化します:iOSアニメーションの高さの制約の問題

UIView.animate(withDuration: 3.0, animations: { 
    self.heightConstraint?.constant = 0.0 
    self.myLabel.alpha = 0.0 
    self.layoutIfNeeded() 
}) 

誰もがなぜ知っていますか?

+0

アニメーションブロックの外側に制約を設定し、アニメーションブロックで「layoutIfNeeded」を呼び出します。 – Paulw11

+0

これは動作しません。私は同じ行動を経験する。私は、私の2つのビューもスクロール表示であると言う必要があります。これが理由だろうか? –

+2

だから私はエラーが見つかりました。問題は、私はビューをサブクラス化し、そこにアニメーションを入れたことです。 self.layoutIfNeeded()の代わりにself.superview ?layoutIfNeeded()を呼び出す必要があります –

答えて

1

制約の変更をアニメートするには、以下のようなコードを記述する必要があります。

self.heightConstraint?.constant = 0.0 
self.myLabel.alpha = 0.0 

UIView.animate(withDuration: 5) { 
    self.layoutIfNeeded() 
} 
+0

いいえ、あなたは必要ありません。 – FreeNickname

1
self.heightConstraint?.constant = 0.0 
self.myLabel.alpha = 0.0 
UIView.animate(withDuration: 3.0, animations: { 
    self.layoutIfNeeded() 
}) 

それはこのようにする必要があります。

0

制約定数を更新する前後にself.layoutIfNeeded()を呼び出す必要があります。コードを次のように変更してください:

self.layoutIfNeeded() 

UIView.animate(withDuration: 3.0, animations: { 
    self.heightConstraint?.constant = 0.0 
    self.myLabel.alpha = 0.0 
    self.layoutIfNeeded() 
}) 
関連する問題