2017-10-11 4 views
0

J'ai un footerView TableView avec deux étiquettes qui peuvent contenir plusieurs lignes. J'utilise ce code dans viewDidLayoutSubviews:Comment actualiser un pied de page dynamique TableView (pas pied de page) en utilisant autolayout

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 
} 

Cela fonctionne très bien (les étiquettes s'étendront sur des lignes de multiples et la taille de la vue est réglage) lorsque la valeur des étiquettes sont réglées avant que la vue est affichée , mais si je mets à jour leur contenu après, la vue ne mettra pas à jour sa mise en page, même en utilisant tableView.reloadData().

Si j'appuie sur une autre vue au-dessus de ma vue et la rejette, la mise en page sera correcte.

Quelle est la bonne façon de mettre à jour la mise en page et la taille de mon pied de page TableView?

+0

try tableView.tableFooterView.layoutIfNeeded() après l'édition. –

Répondre

0

Je pense qu'il pourrait être plus facile de calculer le nombre de lignes dont vous avez besoin en fonction de vos données et retourner la hauteur correcte à l'aide tableView(_:heightForFooterInSection:)

Cette méthode sera appelée à la disposition de votre tableview lorsque le reloadData est appelé.

+0

Salut Konrad, c'est un pied de tableView pas un pied de section ... – franck

+0

Je suis désolé, j'ai mal lu. Donc, si vous voulez aller par 'heightForFooterInSection', vous pouvez utiliser le dernier pied de page. Si vous souhaitez utiliser le pied de tableau, les en-têtes et les pieds de page TableView se comportent en quelque sorte comme des cellules. Vous devriez être capable de configurer les bonnes LayoutConstraints comme vous le faites avec une cellule normale. Le pied de page doit alors se comporter comme n'importe quelle autre cellule de table automatique. Comme une cellule, le pied de page devrait faire sa propre mise en page. – Bersaelor

+0

Mais le dernier pied de page se comporte différemment, c'est collant – franck