2016-07-04 8 views
0

UIViewControllerの中にあるUITableViewを展開/折りたたんでみました。私はゼロにUITableView高さ制約を入れて、アニメーションCollapse Expand UITableView

func collapseExpandRoomSection() { 
    isRoomCollapsed = !isRoomCollapsed 
    tableHeightConstraint.constant = isRoomCollapsed ? 0.0 : totalTableHeight  
    UIView.animateWithDuration(0.3) { 
     self.view.layoutIfNeeded() 
    } 
} 

崩壊効果が正常に動作をするが、私はテーブルを拡張しようとしたときに、すべての細胞がなくなっています。

おかげ

+0

ここに展開するためのペーストコード。 –

+0

あなたの 'totalTableHeight'が正しく設定されていないと思います。 'collapseExpandRoomSection()'メソッドの中で> 0であることを確認しましたか?一時的に 'totalTableHeight'を50.0のような一定の値に置き換え、それが機能するかどうか確認してください。 – Mischa

答えて

0

ルックあなたがconstraintを更新したように、あなたが、私は信じている。このためにそれをやってする必要があります:あなたは、制約を更新してきたように

self.view.setNeedsUpdateConstraints() 
self.view.setNeedsLayout() 
self.view.layoutIfNeeded() 

、したがって、あなたは、まず、設定された更新を更新する必要があります制約とセットのレイアウトが必要です。 layoutIfNeeded()に続いて、変更をすぐに適用します。

コメントで簡単に説明したように、コードはupdateConstraintを上書きする場合にのみ適用されます。上記の質問に答えるのは間違いです。

+0

これは間違っています。ビューの制約を追加、削除、または変更すると、レイアウトは自動的に無効になり( 'setNeedsLayout()')、次のレイアウトサイクルでフレームは自動的に再計算されます。さらに、95%のケースで 'setNeedsUpdateConstraints()'を呼び出す必要はありません。実装で 'updateConstraints()'をオーバーライドして、実際にビューの状態変数に基づいて制約を変更する場合にのみ呼び出す必要があります。 – Mischa

+0

私は情報をありがとう、参照してください。私はドキュメントが私が信じていると言っていることを誤解しました。答えを削除しませんが、それを編集して間違っていると言います。 –

+0

あなたはこれらのレイアウト方法でドキュメントを誤解するのは初めてです...;) – Mischa

関連する問題