7

これはセットアップです:

  • Interface Builder で作成され、IBOutlet 変数にリンクされた UIView ( _vAbout)
  • IBOutlet 変数 ( _ctrBottomAboutView)にリンクされた、アニメーション化するこのビューの制約

私はアニメーション化するためにこのコードを使用しています:

_ctrBottomAboutView.constant = -100;
[UIView animateWithDuration:0.5 animations:^{
    [_vAbout layoutIfNeeded];
}

私の問題は、ビューにサブビューがあるときはいつでも、アニメーションが機能しないことです。ただし、ビューに子がない場合、アニメーションは正しく機能します。

解決策はありますか?私はすべてを試しました:定数値を変更する代わりに制約を追加および削除し、Interface Builder のサブビューに制約を追加します...

4

1 に答える 1

4

空のプロジェクトで地面から始めたいくつかの実験の後、これが私が見つけたものです:

A にアニメーション化したいビューがあり、B にそのスーパービューがある場合

  • layoutIfNeededメッセージを受け取るビューは、制約を所有するビューであることに留意することが非常に重要です。
  • の場合NSLayoutAttributeWidthNSLayoutAttributeHeight制約の所有者は実際には A ですが、他のすべての場合では、制約を所有するビューは B です。

でも

  • A にサブビューがない場合は、いつ[A layoutIfNeeded]でもコードを呼び出すことができ、機能します
  • A に 1 つ以上のサブビューがあるが、アニメーションを開始する場合、viewDidLoad呼び出すことができ[A layoutIfNeeded]、動作します
于 2013-10-16T19:36:11.907 に答える