2017-01-23 19 views
1

私はUITableViewサブビューを持つUIViewを持っています。サブビューを持つUIViewのサイズをアニメ化する

UIViewは、最初はデバイスの幅の50%の幅を持つメニューで、UITableViewはUIViewに対してAutoLayoutの制約を持っています。

メニューの項目を選択すると、UIViewがデバイスの幅の33%にリサイズされます。 UITableViewは、私が予想したように、アニメーションなしでサイズを変更し、UIViewがアニメーションを介してキャッチアップします。

AutoLayoutの制約を維持しながらUIViewで私のUITableViewを簡単にアニメーション化する方法はありますか?私はUIViewのと同じアニメーションブロック内で、次のことを試してみた

let tableWidth = self.mm.menuOneController.tableView.bounds.size.width 
let newTableWidth = (tableWidth * 2)/3 
self.mm.menuOneController.tableView.bounds.size.width = newTableWidth 

これは動作します、のUITableViewはUIViewのアニメーションと一緒にリサイズされた、しかし、自動レイアウトはとしてはかなりない作業を行います私は期待したい。

UIViewのX値は0.0なので、スーパービューの左側に固定されています。サイズ変更すると、右側のサイズから固定されます。しかし、正しい幅に達するまで、UITableViewは左右両方に均等にサイズ変更されているようです(私は理にかなっていることを望みます)。

提案がありますか?

ありがとうございます!

+3

各状態で制約が曖昧でなく、最終的なアニメーション状態の制約を調整した場合、UIView.animate ...内の単純な 'layoutIfNeeded()'(共通のスーパービュー上)がトリック。 – Alladinian

+0

ありがとうございます! – nickjf89

答えて

3

あなたの質問に記載されている3行をアニメーションブロックから消し、ブロックの最後に、サイズを変更しているビューのlayoutIfNeeded()への呼び出しを追加します。 (すなわち、<yourMenuView>.layoutIfNeeded()

これにより、各アニメーションフレームに制約が適用され、制約に準拠するために必要なすべてのサブビューのレイアウトが調整されます。

+0

完璧、ありがとう! – nickjf89

+0

これはうまくいきましたが、現在は2回目の質問でのみ動作しているようです。だから、私は初めてサブビューを追加し、layoutIfNeededは何かをしているのですが、それは最初の時と同じことではありません。助言がありますか? – nickjf89

+0

また、あなたは3つのラインを失うと言いましたか?しかし、これらの行は、私の意見がどこで終わるかを決定し、アニメーション化します。だから私はそれらを失うことができない? – nickjf89

関連する問題