Nouveau dans iOS 8, vous pouvez obtenir des cellules de vue de tableau 100% dynamiques en définissant simplement la hauteur de ligne estimée, puis en mettant en page vos éléments dans la cellule à l'aide de la disposition automatique. Si le contenu augmente en hauteur, la cellule augmentera également en hauteur. Ceci est extrêmement utile et je me demande si le même exploit peut être accompli pour les en-têtes de section dans une vue de tableau?
Peut-on, par exemple, créer un UIView
in tableView:viewForHeaderInSection:
, ajouter une sous- UILabel
vue, spécifier des contraintes de mise en page automatique pour l'étiquette par rapport à la vue et faire augmenter la hauteur de la vue pour s'adapter au contenu de l'étiquette, sans avoir à implémenter tableView:heightForHeaderInSection:
?
La documentation pour les viewForHeaderInSection
états: "Cette méthode ne fonctionne correctement que lorsque tableView: heightForHeaderInSection: est également implémentée." Je n'ai pas entendu si quelque chose a changé pour iOS 8.
Si on ne peut pas faire cela, quelle est la meilleure façon d'imiter ce comportement?
la source
UITableViewAutomaticDimension
dire "si vous renvoyez cette constante danstableView:heightForHeaderInSection:
outableView:heightForFooterInSection:
,UITableView
utilise une hauteur qui correspond à la valeur renvoyée partableView:titleForHeaderInSection:
outableView:titleForFooterInSection:
(si le titre ne l'est pasnil
)".estimatedSectionHeaderHeight
outableView:estimatedHeightForHeaderInSection:
ETsectionHeaderHeight
outableView:heightForHeaderInSection:
. En outre, si vous utilisez les méthodes de délégué, vous devez renvoyer une valeur supérieure à 1,00 pour l'estimation (comportement complètement non documenté), sinon le délégué pour la hauteur ne sera PAS appelé et la hauteur d'en-tête de vue de table par défaut sera utilisée.Cela peut être accompli en définissant (ou en retournant) la vue
estimatedSectionHeaderHeight
sur votre table.Si votre en-tête de section chevauche vos cellules après la configuration
estimatedSectionHeaderHeight
, assurez-vous que vous utilisez également unestimatedRowHeight
.(J'ajoute cette réponse car le deuxième paragraphe contient une réponse à un problème qui peut être trouvé après avoir lu tous les commentaires que certains pourraient manquer.)
la source
estimatedRowHeight
cela fonctionne comme un charme :)Je suis resté coincé dans le même problème où l'en-tête obtenait une hauteur nulle jusqu'à ce que je fournisse une hauteur fixe dans le délégué pour
heighForHeaderInSection
.J'ai essayé de nombreuses solutions, notamment
Mais rien n'a fonctionné. Ma cellule utilisait également des mises en page automatiques appropriées. Les lignes changeaient leur hauteur dynamiquement en utilisant le code suivant, mais pas l'en-tête de section.
Le correctif est extrêmement simple et étrange aussi, mais j'ai dû implémenter les méthodes de délégué au lieu d'un code de ligne pour le
estimatedSectionHeaderHeight
etsectionHeaderHeight
qui va comme suit pour mon cas.la source
Swift 4+
travail (testé à 100%)
Si vous avez besoin des deux sections ainsi que des lignes avec une hauteur dynamique basée sur le contenu, vous pouvez utiliser le code ci-dessous:
Sur viewDidLoad (), écrivez ces lignes:
Nous avons maintenant défini la hauteur de ligne et la hauteur de section à l'aide des méthodes UITableView Delegate:
la source
j'ai essayé
mais il n'a pas correctement dimensionné l'en-tête avec l'étiquette multiligne. Ajouté ceci pour résoudre mon problème:
la source
tableView:estimatedHeightForHeaderInSection
ettableView:heightForHeaderInSection
au lieu de définir à viewDidLoad.estimatedSectionHeaderHeight
n'est nécessaire que sous iOS 11Dans mon cas:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.mis en storyboard ne fonctionne pas .
le remplacement a
heightForHeaderInSection
fonctionné .environnement de test:
la source
Oui, ça marche pour moi. Je dois faire plus de changements comme ci-dessous:
la source
J'ai modifié la réponse iuriimoz . Vient de remplacer la méthode viewWillAppear:
Ajoutez également tableView.layoutIfNeeded () à
Pour iOS 10
avoir un effet d'animation "fondu" sur la vue apparaîtra pour moi
la source