2017-10-11 14 views
0

複数の行を保持できる2つのラベルを持つTableViewフッタービューがあります。 私はviewDidLayoutSubviewsでこのコードを使用しています:これは(ラベルが最終的に倍数ラインの上に広がっていくとビューのサイズを調整している)のビューが表示される前に、ラベル値が設定されている時に正常に動作している自動レイアウトを使用して動的なTableViewフッター(セクションフッターではない)をリフレッシュする方法

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    label1.preferredMaxLayoutWidth = tableView.frame.size.width - Constant.footerMarginSpace 
    label2.preferredMaxLayoutWidth = tableView.frame.size.width - Constant.footerMarginSpace 
    footerView.setNeedsLayout() 
    footerView.layoutIfNeeded() 
    footerView.frame.size.height = footerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height 
    tableView.tableFooterView = footerView 
} 

後で内容を更新すると、tableView.reloadData()を使用していても、ビューはそのレイアウトを更新しません。

私のビューの上に別のビューを押して、それを閉じると、レイアウトは正しいでしょう。

TableViewフッターのレイアウトとサイズを更新する適切な方法は何ですか?

+0

編集後にtableView.tableFooterView.layoutIfNeeded()を試してください。 –

答えて

0

私はあなたがあなたのデータに基づくとreloadDataが呼び出されたときに、この方法は、あなたのテーブルビューをレイアウトするために呼び出されます tableView(_:heightForFooterInSection:)

を使用して、正しい高さを返す必要がある行数を計算する方が簡単かもしれないと思います。

+0

こんにちは、コンラッド、それはセクションフッタではなくtableViewフッタです... – franck

+0

私は誤解しています。 あなたが 'heightForFooterInSection'に行きたい場合は、最後のセクションフッタを使うことができます。 Table Footerを使用したい場合、TableViewのヘッダーとフッターはCellのように動作します。通常のセルと同じように、正しいLayoutConstraintsを設定できるはずです。その場合、フッターは他の自動サイズテーブルビューCellと同じように動作するはずです。 セルと同様に、フッターは自分のレイアウトにする必要があります。 – Bersaelor

+0

最後のセクションフッタは動作が異なりますが、粘着性があります – franck

関連する問題