いくつかの UIViews を持つ UIScrollView があります。これには、他のすべての種類のビュー (ラベル、テキスト フィールドなど) が含まれています。ここで、デバイスを回転させると、スクロール ビュー内のビューのサイズと位置を変更したいと思います。そのために、ポートレート モードとランドスケープ モードの両方の一連の制約を前もって計算し、現在のインターフェイスの向きに従ってスクロール ビューの制約を切り替えます。基本的に、これは期待どおりに機能します。問題は、ビューを単純に配置するのではなく、新しい位置にスムーズにアニメーション化することです。そして、これは私が今完全に立ち往生しているところです。基本的なアニメーションは問題なく動作します。つまり、スクロール ビュー内のビューは完全にアニメーション化されますが、これらのビュー内のサブビューは完全にアニメーション化されます。単に再配置され、アニメーション化されません。次のコードを使用してアニメーションを開始します
NSMutableArray *constraints = UIInterfaceOrientationIsLandscape(interfaceOrientation) ? self.landscapeConstraints : self.portraitConstraints;
[self.scrollView removeConstraints:self.scrollView.constraints];
[self.scrollView addConstraints:constraints];
[UIView animateWithDuration:duration
animations:^{
[self.scrollView layoutIfNeeded];
}];
私が知る限り (そして私の研究が進む限り)、これはまさにそれが行われるべき方法です... しかし、明らかに私は間違っており、私の人生で何を別の方法で行う必要があるかを理解することはできません. アニメーションの終わりには、すべてが完全にうまく配置されていますが、サブビューは単にアニメーション化を拒否しています。どんな助けでも大歓迎です!
完全を期すために、サブビューの制約も設定するストーリーボードから、スクロール ビュー内に配置するビューをロードすることに言及する価値があるかもしれません。アニメーションを除いて、レイアウトは実際に機能するので、これは問題にはならないと思います。